PEP 3104 содержит объяснение и решение этой проблемы.Проблема заключается в том, что Python рассматривает любое присвоение имени как объявление переменной local .
>>> n = 1
>>> def bar():
>>> n = n + 1
>>>
>>> bar()
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
bar()
File "<pyshell#7>", line 2, in bar
n = n + 1
UnboundLocalError: local variable 'n' referenced before assignment
Существует несколько способов решения этой проблемы, если вы используете версию Python без нелокальное ключевое слово.Один уродливый трюк - это обернуть вашу переменную в список:
>>> n=[1]
>>> def bar():
>>> n[0] = n[0] + 1
>>>
>>> bar()
>>> n
[2]
Хотя этот трюк работает, обычно лучше переписать код, чтобы устранить необходимость в нелокальных присваиваниях.