【问题标题】:2 errors are encountered while trying to raise 1 of them in an exception尝试在异常中引发 1 个错误时遇到 2 个错误
【发布时间】:2021-07-23 16:55:29
【问题描述】:

我是 python 新手,正在尝试学习 try 和 except 语句,但我遇到了一件我无法理解的事情,也无法在谷歌上找到答案。问题是当我运行这段代码时,它会打印“错误”:

try:
    print(1/0)
except ZeroDivisionError:
    print('Error')

但是,在下面的代码中,它在异常中引发了不同的错误,不知何故这两个错误都遇到了,而不是故意引发的错误。代码:

try:
    print(1/0)
except ZeroDivisionError:
    raise ValueError

错误显示:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    print(1/0)
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    raise ValueError
ValueError

我不明白为什么会出现这两个错误,而不仅仅是ValueError,因为我已经为ZeroDivisionError 做了一个例外

任何帮助将不胜感激

【问题讨论】:

  • During handling of the *above exception*, another exception occurred: 它可以帮助您调试
  • 使用raise ValueError from None 抑制异常链接。
  • 当代码有ValueError时,为什么你的回溯说TypeError?请发布正确的回溯和代码。
  • @Barmar 抱歉,我复制了错误的错误。我现在已经更新了错误。
  • @Barmar 感谢您的提示,但我不明白为什么会这样。

标签: python try-catch


【解决方案1】:

failurerejection 混为一谈是异常处理系统的一般限制:raise ZeroDivisionError 被视为等同于 1/0 之类的表达式,甚至尽管后者可能是编程中的错误,而前者更可能是关于调用者错误的故意陈述。因此,外观是您的处理程序未能处理第一个异常;在这种情况下,Python 会自动包含原始异常的回溯(和类型/消息),因为它比仅针对“级联错误”更有用。 cmets 解释了如何在需要时抑制这种帮助。

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2013-06-11
    相关资源
    最近更新 更多