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

http://pastie.org/1966237

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

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


person Louis93    schedule 24.05.2011    source источник
comment
Вы действительно должны поставить программу в вопрос, так как пирожки иногда уходят.   -  person novalis    schedule 24.05.2011


Ответы (4)


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

def foo():
    print a

vs

def bar():
    a = 1
    print a

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

def baz():
    print a
    a = 1

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

person novalis    schedule 24.05.2011

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

person Ignacio Vazquez-Abrams    schedule 24.05.2011

Похоже, это, вероятно, переменная счета. Он является локальным в main(), но вы пытаетесь сослаться на него в hey_user().

person John Gaines Jr.    schedule 24.05.2011
comment
Вопрос: Когда я инициализирую счет в начале всего, все равно возникает та же ошибка. - person Louis93; 24.05.2011

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

def main (): глобальная оценка score = 0 question, solution = print_et_list() scoresofar = hey_user (solution) print "\nВаша оценка сейчас", scoresofar вопрос, решение = print_et_list()

person Boaz Yaniv    schedule 24.05.2011