Не могу избавиться от несвязанной локальной ошибки в Python!

#python #debugging #local

#python #отладка #Местные новости

Вопрос:

http://pastie.org/1966237

Я продолжаю получать несвязанную локальную ошибку. Я не понимаю, почему это происходит, если программа работает правильно, она должна сразу перейти ко второму назначению функции print_et_list в основной функции, зацикливаясь сама по себе без фактического зацикливания. Программа завершается только с помощью sys.exit() в функции hey_user.

Я включил всю программу для контекста, она не слишком длинная. Дайте мне знать, если вы хотите взглянуть на текстовые файлы, которые я использую в программе, однако я уверен, что маловероятно, что это источник проблемы.

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

1. На самом деле вам следует поместить программу в вопрос, поскольку пирожки иногда исчезают.

Ответ №1:

UnboundLocalError возникает, когда вы считываете значение локальной переменной перед ее установкой. Почему score является локальной переменной, а не глобальной переменной? Потому что вы задаете ее в функции. Рассмотрим эти две функции:

 def foo():
    print a
  

против

 def bar():
    a = 1
    print a
  

В foo() a является глобальным, потому что оно не задано внутри функции. В bar() a является локальным. Теперь рассмотрим этот код:

 def baz():
    print a
    a = 1
  

Здесь a задано внутри функции, поэтому оно локальное. Но она не была установлена во время выполнения инструкции print, поэтому вы получаете UnboundLocalError.

Ответ №2:

Вы забыли передать score в hey_user() .

Ответ №3:

Похоже, что это, вероятно, переменная score. Это локальная ошибка в main (), но вы пытаетесь ссылаться на нее в hey_user().

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

1. Вопрос: Когда я инициализирую score в начале всего процесса, по-прежнему возникает та же ошибка.

Ответ №4:

Если вы хотите сделать score глобальной переменной, обязательно объявите ее с помощью global инструкции:

def main (): глобальная оценка score = 0 вопрос, решение = print_et_list() scoresofar = hey_user (решение) выведите «Ваша оценка теперь», забивает на вопрос, решение = print_et_list()