在处理上述异常时,for循环中的第一个输入发生了另一个异常

0 投票
2 回答
4227 浏览
提问于 2025-06-18 04:10

当我在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!

撰写回答