Python Glossary English

все 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Сообщить о неточности