все Python 3Исключенияисключение
UnboundLocalError
встроенные исключения
Чтение локальной переменной до присваивания (подкласс NameError); частая ловушка с присваиванием в функции.
Синтаксис
raise UnboundLocalError
Python решает вопрос «локальная или нет» сразу по всему телу функции: если имя где-нибудь внутри присваивается, оно локально везде — и чтение до этой строки падает, даже когда снаружи есть глобальная переменная с тем же именем. Особенно коварны count += 1 и total = total + 1: справа читается ещё не созданная локальная переменная. Если внешнюю переменную действительно нужно менять — объявите global (или nonlocal для вложенной функции), но обычно чище передать значение аргументом и вернуть результат.
Примеры
try:
raise UnboundLocalError
except UnboundLocalError as e:
print(type(e).__name__) # → UnboundLocalError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности