my_str_1 = «1: outside of func»
my_str_2 = «2: outside of func»
def func_1():
my_str_1 = «1: inside the func»
my_str_2 = «2: inside the func»
def func_2():
print(my_str_1)
print(my_str_2)
my_str_1 = «1: inside the class»
func_2()
func_1()
prints:
Traceback (most recent call last):
File “
File “
File “
UnboundLocalError: local variable ‘my_str_1’ referenced before assignment
В принципе на эту тему написано довольно много постов и погуглив можно спокойно найти объяснение. Но т.к. в свое время эта особенность питона попила у меня много кровушки я решил написать небольшой пост.
В чем причина такого поведения?
Причина заключается в том что питон преобразует переменную my_str_1 в локальную для func_2 и во время вызова функции print получает на вход не инициализированную переменную.
Решения проблемы тривиальные — либо убрать print, либо изменить название переменной, или объявить my_str_1 как глобальную.
Кто хочет более подробно ознакомиться с причинами такого поведения см ссылки, особенно с [2]
Ссылки
[1]https://docs.python.org/2/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value
[2]http://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python/
[3]http://programmingwats.tumblr.com/page/2
Автор: Евгений Курочкин