繁体   English   中英

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

[英]“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM