我在try和except语句中遇到一些问题,我有一个条目小部件,它接受字符串输入,但我有代码,后来将它转换为整数,问题是如果用户输入类似文本它会抛出一个像这样的错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.2/tkinter/__init__.py", line 1402, in __call__
return self.func(*args)
File "/home/ppppwn3d/workspace/Python/JailBreakBob/JailBreakBob.py", line 157, in buttonclick_gamescreen
entryx = int(e1.get())
ValueError: invalid literal for int() with base 10: 'abc'
所以我想用try和except语句隐藏错误,但我现在收到另一条错误消息。
这就是代码中的样子。
while pressed == 8 :
try:
entryx = int(e1.get())
entryy = int(e2.get())
except ValueError:
print("text")
answerx = answerlistx[randomimage]
answery = answerlisty[randomimage]
if entryx == answerx and entryy == answery
canvas.delete(images)
randomimage = random.randrange(0,49+1)
scorecounter = scorecounter + 1
game = PhotoImage(file=imagelist[randomimage])
images = canvas.create_image(30, 65, image = game, anchor = NW)
e1.delete(0, END)
e2.delete(0, END)
pressed = ''
if entryx > 10 or entryx < -10 or entryy > 10 or entryy < -10 :
wrong = canvas.create_image(30, 65, image = outside, anchor = NW)
e1.delete(0, END)
e2.delete(0, END)
pressed = ''
else:
wrong = canvas.create_image(30, 65, image = incorrect, anchor = NW)
e1.delete(0, END)
e2.delete(0, END)
pressed = ''
新的错误讯息:
text
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.2/tkinter/__init__.py", line 1402, in __call__
return self.func(*args)
File "/home/ppppwn3d/workspace/Python/JailBreakBob/JailBreakBob.py", line 165, in buttonclick_gamescreen
if entryx == answerx and entryy == answery:
UnboundLocalError: local variable 'entryx' referenced before assignment
我无法弄清楚为什么会发生这种情况以及如何解决它,所以任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:7)
如果try/except
块中存在异常,则范围中不会定义entryx
和entryy
个变量。
您应该抛出错误并退出程序,或在entryx
块中指定entryy
和except
默认值。
此外,你可以进行一个while循环,直到用户输入一个像建议here那样的整数。
答案 1 :(得分:5)
要添加到@alecxe's answer,我宁愿像这样修改程序:
entryx, entryy = 0, 0
try:
entryx = int(e1.get())
entryy = int(e2.get())
except ValueError:
print("text")
基本上,错误的含义是,如果出现错误,entryx, entryy
永远不会被分配任何内容,但稍后会在if..else
检查中被引用。
最好在try..except
块之外设置变量的默认值。
答案 2 :(得分:1)
我会初始化answerx,在尝试阻止启动之前用None回答。
答案 3 :(得分:0)
您可以看到“短信”信息 所以,异常被提出并且entryx没有被初始化 这就是为什么你有:
local variable 'entryx' referenced before assignment