свободная переменная, на которую ссылаются перед назначением в заключающей области

#python #function #variables #error-handling

Вопрос:

Эй, у меня возникли некоторые проблемы с пониманием того, что я сделал не так/нахожу способ это исправить, вы можете мне помочь, ребята?

 def main():
    Keys = 0
    def Function1():
        global all
        def Function2():
            global all
            print(str(Keys))
        Function2()
        Keys = Keys   1
    Function1()
main()
 

каждый раз, когда я пытаюсь запустить это, я получаю сообщение об ошибке «свободная переменная ‘Ключи’, на которую ссылаются перед назначением в заключительной области».

Заранее спасибо!

Комментарии:

1. Как ты думаешь global all , что он делает?

Ответ №1:

Вам нужно определить global Keys для каждой функции. Функция считает, что Keys это локальная переменная.

 def main():
    global Keys
    Keys = 0
    def Function1():
        global Keys
        global all
        def Function2():
            global Keys
            global all
            print(str(Keys))
        Function2()
        Keys = Keys   1
    Function1()
main()
 

Однако использование global плохо. Вот список причин, по которым использование global плохо

Таким образом, вместо использования global вы можете передать его в качестве параметра.

 def main():
    Keys = 0
    def Function1(Keys):
        def Function2(Keys):
            print(str(Keys))
        Function2(Keys)
        Keys = Keys   1
    Function1(Keys)
main()
 

Кроме того, all это функция в python. Нет абсолютно никакой необходимости делать это global

Комментарии:

1. Большое вам спасибо!

2. Приветствую @Zachary, подумайте о том, чтобы принять ответ