【发布时间】:2013-02-11 05:14:48
【问题描述】:
[社区编辑以提供可重现的示例:]
def main():
e = None
print(locals())
while not e:
try:
raise Exception
except Exception as e:
pass
main()
生产
~/coding$ python3.3 quiz2.py
{'e': None}
Traceback (most recent call last):
File "quiz2.py", line 11, in <module>
main()
File "quiz2.py", line 5, in main
while not e:
UnboundLocalError: local variable 'e' referenced before assignment
[已编辑] 包含可重现的代码
我正在尝试运行一个while循环,我使用的条件是当变量e==None时循环继续。相关代码如下:
print("\nThe current score list contains the following people's scores: ")
score_list = open("score_list.dat", "rb")
score_name = []
e = None
while not e:
try:
score = pickle.load(score_list)
name = pickle.load(score_list)
score_name.append([score, name])
except EOFError as e:
pass
score_list_sorted=sorted(score_list)
sort_list.close()
for item in score_list_sorted:
print("Score: ", item[0], "\t", item[1])
完整代码在这里:https://www.dropbox.com/s/llj5xwexzfsoppv/stats_quiz_feb24_2013.py
它需要的数据文件(运行测验)在这个链接中:https://www.dropbox.com/s/70pbcb80kss2k9e/stats_quiz.dat
main()需要编辑才能使用正确的数据文件地址:
我收到的完整错误消息如下。这很奇怪,因为我在 while 循环之前初始化了 e。我希望有人能帮我解决这个问题。谢谢!
Traceback (most recent call last):
File "<pyshell#217>", line 1, in <module>
main()
File "/Users/Dropbox/folder/stats_quiz_feb24_2013.py", line 83, in main
while not e:
UnboundLocalError: local variable 'e' referenced before assignment
【问题讨论】:
-
旁白:
score_name = score = name = []行可能不会像您认为的那样。它不会创建三个列表,而是创建 一个 列表,并将三个名称绑定到它。在控制台上尝试,然后score.append(3); print (score, score_name, name)。在这里可能无关紧要,因为您重新绑定了score和name,但仍然如此。 -
呃,我完全忘记了参考的问题(来自 R,它没有这个问题)。感谢您指出这一点!
-
无法复制。请提供一个最小的独立示例。
-
我不知道如何复制 - 代码中一定有我们看不到的东西。您能否尝试制作一个可重现的示例 - 即可以运行并产生此错误的代码的简短版本? (很可能在这样做的过程中,您会首先发现导致问题的原因)。
-
完整的代码对我有用。请提供一个最小的失败代码,而不是这个怪物。
标签: python exception exception-handling python-3.x while-loop