У меня есть питон код, где я пытаюсь получить доступ к строке в родительской области от закрытия, но всякий раз, когда я пытаюсь получить доступ к нему, я получаю ошибку:Не удается получить доступ к родительской строке из закрытия?
UnboundLocalError: local variable 'my_string' referenced before assignment
Что также странно, что у меня есть список, определенный в той же области, что и строка, но у меня нет проблем с доступом к переменной.
Я создал упрощенную версию кода, который демонстрирует проблему:
def test():
def f1():
print my_list
print my_string
my_string += "test"
my_string = "1"
my_list = [1,2,3]
f1()
test()
Когда я выполняю это я получаю выход:
[1, 2, 3]
Traceback (most recent call last):
File "test.py", line 9, in <module>
test()
File "test.py", line 8, in test
f1()
File "test.py", line 4, in f1
print my_string
UnboundLocalError: local variable 'my_string' referenced before assignment
Почему я смог получить доступ к списку, но не Струна? Как я могу получить доступ к моей строке из моего закрытия?
Я новичок в python и закрытии, поэтому, если я что-то оставил, пожалуйста, дайте мне знать.
Спасибо за информацию. Я всегда слышал, что использование 'global' было большим нет-нет, вы думаете, что использование этого здесь было бы лучшим решением? Кроме того, почему моя переменная списка доступна, когда я использую ее точно так же, как моя строковая переменная? –
Я думаю, лучшим решением было бы вернуть строку вместо этого и добавить в 'my_string' вне' f1() '. Вызов 'print' на самом деле не проблема. Если вы удалите 'my_string + =" test "', вы увидите, что он отлично печатает. Извините, хотя я не могу сказать, почему он указывает на эту строку в SyntaxError. – zondo