Опять же на programmingwats.tumblr.com наткнулся на небольшую особенность питона.
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 “<stdin>”, line 1, in <module>
File “<stdin>”, line 8, in func_1
File “<stdin>”, line 5, in func_2
UnboundLocalError: local variable ‘my_str_1’ referenced before assignment
В принципе на эту тему написано довольно много постов и погуглив можно спокойно найти объяснение. Но т.к. в свое время эта особенность питона попила у меня много кровушки я решил написать небольшой пост.
В чем причина такого поведения?
Причина заключается в том что питон преобразует переменную my_str_1 в локальную для func_2 и во время вызова функции print получает на вход не инициализированную переменную.
Решения проблемы тривиальные - либо убрать print, либо изменить название переменной, или объявить my_str_1 как глобальную.
Кто хочет более подробно ознакомиться с причинами такого поведения см ссылки, особенно с [2]
[2]http://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python/
[3]http://programmingwats.tumblr.com/page/2
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 “<stdin>”, line 1, in <module>
File “<stdin>”, line 8, in func_1
File “<stdin>”, line 5, in func_2
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
Комментариев нет:
Отправить комментарий