[英]“ during the handling of above exception, another exception occurred ” for the first input in the for loop
当我在 for 循环的输入前面写“int”时,我为非整数输入写的 try/except 块回溯错误“在处理上述异常期间,发生了另一个异常”显示。 但是,在该范围内的所有其他输入上,try/except 块被识别并打印我写的错误消息。
代码
QLEN = 11
MAX_NUM = 12
for i in range(1,QLEN):
int2 = (random.randint(1,MAX_NUM))
int1 = (random.randint(1,MAX_NUM))
print()
print("Question {}".format(i))
try:
ans = int(input("{} + {}: ".format(int1,int2)))
add(int1,int2,ans)
except ValueError:
add(int1,int2,ans)
“添加” FUNCTION
def add(a,b,c):
if a + b != c:
print("Incorrect")
print("Correct Answer Was {}".format(a + b))
return (a + b)
print()
else:
print("Correct")
错误
Traceback (most recent call last):
File "main.py", line 125, in <module>
ans = int(input("{} + {}: ".format(int1,int2)))
ValueError: invalid literal for int() with base 10: 'e'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 128, in <module>
add(int1,int2,ans)
NameError: name 'ans' is not defined
您尝试执行相同的欺诈代码,导致在 except 块中的 try 块中出现异常。 此外 python 缩进约定是4 个空格,而不是两个。 您的原始代码将产生类似于此的错误消息:
Traceback (most recent call last):
File "/Users/eric/Desktop/ Python_Files/stackoverflow/0008.py", line 21, in <module>
ans = int(input("{} + {}: ".format(int1,int2)))
ValueError: invalid literal for int() with base 10: 'ans'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/eric/Desktop/ Python_Files/stackoverflow/0008.py", line 24, in <module>
add(int1,int2,ans)
NameError: name 'ans' is not defined
尝试使用下面的代码(除了块不同)
import random
QLEN = 11
MAX_NUM = 12
def add(a,b,c):
if a + b != c:
print("Incorrect")
print("Correct Answer Was {}".format(a + b))
return (a + b)
print()
else:
print("Correct")
for i in range(1,QLEN):
int2 = (random.randint(1,MAX_NUM))
int1 = (random.randint(1,MAX_NUM))
print()
print("Question {}".format(i))
try:
ans = int(input("{} + {}: ".format(int1,int2)))
add(int1,int2,ans)
except ValueError:
print("You answered with something that wasn't an integer!")
用其他任何东西替换 except 块,例如,在这种情况下,您没有以正确格式回答的通知应该可以工作。
这是一个示例 output:
Question 1
9 + 10: 21
Incorrect
Correct Answer Was 19
Question 2
2 + 1: 3
Correct
Question 3
8 + 7: 15
Correct
Question 4
8 + 12: LOL
You answered with something that wasn't an integer!
int
因 ValueError 失败,因为它无法解析不是 integer 的东西。 这导致它触发了except
部分,该部分使用ans
调用add
。 但是, ans
是一个未知变量,因为它从未被赋值( int
failed ),在处理前一个时导致另一个异常。
与某些语言不同,在 Python 中,如果您不指定值,则不会有任何“默认”值。
这是更正后的片段:
print("Question {}".format(i))
try:
ans = int(input("{} + {}: ".format(int1,int2)))
except ValueError:
print("Bad input!")
continue
add(int1,int2,ans)
你期望失败的是int
,所以你用try/except
包围它。 如果失败,您将continue
并因此跳过循环中稍后的add
调用。 如果没有例外,那么你有一个很好的答案,你可以用所有ans
arguments 调用add
。
此外,在return (a+b)
之后的print()
永远无法执行,因为return
将离开 function。 此外,您不需要在诸如int2 = (random.randint(1,MAX_NUM))
类的表达式中使用外括号,因为它们只会增加混乱,并且可能会与具有一个元素的元组混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.