在处理上述异常时,for循环中的第一个输入发生了另一个异常
当我在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)
“添加”函数
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
相关问题:
- 暂无相关问题
2 个回答
0
int
在处理一个不是整数的东西时出错了,导致出现了ValueError。这让程序进入了except
部分,试图用ans
来调用add
。但是,ans
是个未知变量,因为它从来没有被赋值(因为int
出错了),这又引发了另一个错误,发生在处理第一个错误的时候。
和一些其他编程语言不同,在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
,可以用所有整数参数来调用add
。
另外,return (a+b)
后面的print()
永远不会被执行,因为return
会直接退出函数。而且,在像int2 = (random.randint(1,MAX_NUM))
这样的表达式中,外面的括号是多余的,它们只会让代码看起来更复杂,还可能让人误以为这是一个只有一个元素的元组。
1
你尝试在异常处理的部分执行同样的错误代码,这段代码在尝试执行时就出错了。而且,Python的缩进规则是4个空格,而不是2个。你原来的代码会产生类似下面的错误信息:
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!")
把异常处理的部分换成其他内容,比如在这种情况下提示你没有按照正确的格式回答,这样应该就能正常工作了。
下面是一个示例输出:
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!