Ситуация: вы пишете простую программу на Python, которая что-то считает по заданному алгоритму. Сначала всё идёт как обычно: объявляется глобальная переменная x, потом делаем новую функцию и обращаемся внутри неё к этой переменной:
x = 10
def sum():
x = x + 5
print(x)
Но при запуске этой функции командой sum() компьютер выдаёт ошибку:
Traceback (most recent call last):
File «main.py», line 6, in
sum()
File «main.py», line 3, in sum
x = x + 5
❌ UnboundLocalError: local variable ‘x’ referenced before assignment
Что это значит: Python ожидает, что x внутри функции будет локальной переменной. Соответственно, он ищет, где она объявляется в функции. А она не объявлена. Python падает с ошибкой.
Когда встречается: когда программист забыл про области видимости переменных или не использовал команду global
.
Что делать с ошибкой UnboundLocalError: local variable referenced before assignment
Главное — определиться с областью видимости и решить, какую переменную вы хотите использовать: локальную или глобальную.
Если вам нужна локальная переменная, то её нужно добавить внутрь функции. Имя переменной при этом может совпадать с именем такой же глобальной переменной, но она никак на неё не повлияет. В этом случае нужно в функцию добавить строку x = <значение>, например:
x = 10
def sum():
x = 11
x = x + 5
# выводим сумму с локальной переменной = 16
print(x)
sum()
# выводим значение глобальной переменной
# оно не поменялось и равно 10
print(x)
Если мы хотим внутри функции работать с глобальной переменной, то её также нужно добавить в функцию командой global
. После этого всё, что мы сделаем внутри функции с этой переменной, будет влиять и на значение глобальной переменной. Работает это так:
x = 10
def sum():
global x
x = x + 5
# выводим сумму с глобальной переменной = 15
print(x)
sum()
# выводим значение глобальной переменной
# оно поменялось и равно 15
print(x)