← Все вопросы

UnboundLocalError: local variable referenced before assignment — что это?

Задан 33 месяца назад1.3к просмотров1 ответ
8

Внутри функции меняю глобальную переменную-счётчик, а Python кидает UnboundLocalError: local variable 'count' referenced before assignment. Переменная же объявлена выше функции! Почему так и как починить?

1 ответ

12
✓ Принятый ответ — помог автору

UnboundLocalError возникает, когда внутри функции вы присваиваете переменной значение, и из-за этого Python считает её локальной — но используете её раньше, чем присвоили.

Классика со счётчиком:

count = 0

def add():
    count = count + 1   # UnboundLocalError

add()

Почему: раз внутри функции есть count = ..., Python решает, что count — локальная переменная функции. А в правой части count + 1 он читает эту локальную переменную до присваивания — её ещё нет.

Решение зависит от цели:

  1. Хотите менять глобальную — объявите global:
def add():
    global count
    count = count + 1
  1. Лучше — не трогать глобальные, а передавать и возвращать значение:
def add(count):
    return count + 1

count = add(count)
  1. Внутри вложенной функции для переменной внешней функции используют nonlocal.

Короткое правило: если присваиваете переменную внутри функции, она по умолчанию локальная. Чтобы работать с внешней — global или nonlocal, либо передавайте через аргументы.

Ваш ответ

, чтобы ответить на вопрос.