UnboundLocalError: local variable referenced before assignment — что это?
Внутри функции меняю глобальную переменную-счётчик, а Python кидает UnboundLocalError: local variable 'count' referenced before assignment. Переменная же объявлена выше функции! Почему так и как починить?
1 ответ
UnboundLocalError возникает, когда внутри функции вы присваиваете переменной значение, и из-за этого Python считает её локальной — но используете её раньше, чем присвоили.
Классика со счётчиком:
count = 0
def add():
count = count + 1 # UnboundLocalError
add()
Почему: раз внутри функции есть count = ..., Python решает, что count — локальная переменная функции. А в правой части count + 1 он читает эту локальную переменную до присваивания — её ещё нет.
Решение зависит от цели:
- Хотите менять глобальную — объявите
global:
def add():
global count
count = count + 1
- Лучше — не трогать глобальные, а передавать и возвращать значение:
def add(count):
return count + 1
count = add(count)
- Внутри вложенной функции для переменной внешней функции используют
nonlocal.
Короткое правило: если присваиваете переменную внутри функции, она по умолчанию локальная. Чтобы работать с внешней — global или nonlocal, либо передавайте через аргументы.