← Все вопросы
UnboundLocalError: local variable referenced before assignment — в чём причина?
15
count = 0
def inc():
count = count + 1
return count
inc()
Падает UnboundLocalError: local variable 'count' referenced before assignment. Но count же объявлен сверху!
3 ответа
24
✓ Принятый ответ — помог автору
Раз внутри функции есть присваивание count = ..., питон считает count локальной переменной на всю функцию. И в строке count = count + 1 справа он читает ещё не созданную локальную, а не глобальную — отсюда ошибка.
Два решения в зависимости от задачи:
# 1) если правда надо менять глобальную:
def inc():
global count
count = count + 1
return count
# 2) лучше — передавать и возвращать:
def inc(count):
return count + 1
count = inc(count)
Второй вариант чище: функции на глобалках быстро превращаются в кашу. global оставляй для редких случаев.
Владимир Елисеев не знал что присваивание делает её локальной на всю функцию, спасибо! · 7 месяцев назад
Владимир Григорьев @ автор: да, это решается на этапе компиляции, до запуска · 7 месяцев назад
7
Добавь global count первой строкой функции.
5
Присвоение внутри делает имя локальным целиком.
Ваш ответ
Войдите, чтобы ответить на вопрос.