def main():
name = ''.join(user_word.lower().split())
name = name.replace('-','') # what?
limit = len(name)
phrase = True
while running:
temp_phrase = phrase.replace(' ', '')
if len(temp_phrase) < limit:
print(f"length of anagram phrase = {len(temp_phrase)}")
find_anagram(name, dict_file)
print("Current anagram phrase =", end = " ")
print(phrase, file=sys.stderr)
choice, name = process_choice(name)
phrase += choice + ' '
elif len(temp_phrase) == limit:
print("n**FINISHED!!**n")
print("Anagram of name", end = " ")
print(phrase, file=sys.stderr)
print()
try_again = input("nnWant to try again? (Press Enter or else 'n' to quit)n")
if try_again.lower() == 'n':
running = False
sys.exit()
else:
main()
运行我的代码后,我不断得到错误
UnboundLocalError: local variable 'running' referenced before assignment
所以我试着在主函数的参数中创建一个名为running的变量,但我遇到了另一个错误,所以我想我会先解决这个问题。任何关于如何修复的线索。
附带说明:这个问题来自于《不切实际的python项目》一书(第3章项目5(,我几乎复制了所有的代码,所以我不确定它是如何不起作用的。
在赋值错误之前引用变量的原因是,正如错误所描述的,在给变量赋值之前引用变量。
变量running
仅在while循环内部被引用,而不是在之前被引用。为了实现这一点,您必须在while循环上方添加一行,为running
赋值。
考虑这个例子:
def my_function():
print(my_variable)
my_variable = 'this is a string'
my_function()
在本例中,我尝试打印my_variable
。然而,在我尝试打印它之前,没有任何分配给它。所以输出如下:
UnboundLocalError: local variable 'my_variable' referenced before assignment
但是,如果在像这样打印变量之前给它分配一些值,我就会得到预期的输出。
def my_function():
my_variable = 'this is a string'
print(my_variable)
my_function()
输出:
this is a string
您可能会问,为什么会发生这种情况,难道python不应该看到我为它分配了一个值并打印该值吗?这个问题的答案是否定的。简单地说,Python是从上到下执行的,所以当试图打印my_variable
而不在上面为其分配任何内容时,代码就会崩溃。以下是关于python代码如何工作的一些信息。