UnboundLocalError
Ето парче обикновен код:
x = 5
def bar():
print(x)
bar() # 5
Нищо странно. Сега да добавим още един ред в края на bar
:
x = 5
def bar():
print(x)
x += 1
bar() # UnboundLocalError: local variable 'x' referenced before assignment
Заради присвояването x
е станала локална променлива, която засенчва глобалната. И тъй като се опитваме да изплзваме локалната променлива прекалено рано получаваме UnboundLocalError
.
Правилния начин да се направи горното е чрез global
:
x = 5
def bar():
global x
print(x)
x += 1
bar() # 5
print(x) # 6
Изричното деклраиране е с цел да ви напомни, че променяте глобална променлива.
Примера е взет от python FAQ. Там ще намерите много други полезни неща.