python - 当 Python 3 中已经存在异常时引发异常

标签 python exception exception-handling python-3.x

当以下代码中引发第二个异常 (B) 时,我的第一个异常 (A) 会发生什么情况?

class A(Exception): pass
class B(Exception): pass

try:
    try:
        raise A('first')
    finally:
        raise B('second')
except X as c:
    print(c)

如果使用 X = A 运行,我会得到:

Traceback (most recent call last):
  File "raising_more_exceptions.py", line 6, in 
    raise A('first')
__main__.A: first

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "raising_more_exceptions.py", line 8, in 
    raise B('second')
__main__.B: second

但如果 X = B 我得到:

second

问题

  1. 我的第一个异常去哪儿了?
  2. 为什么只能捕获最外层的异常?
  3. 如何剥离最外层的异常并重新引发较早的异常?

更新0

这个问题专门针对 Python 3,因为它的异常处理与 Python 2 完全不同。

最佳答案

回答问题3,你可以使用:

raise B('second') from None

这将删除异常A回溯。

Traceback (most recent call last):
  File "raising_more_exceptions.py", line 8, in 
    raise B('second')
__main__.B: second

关于python - 当 Python 3 中已经存在异常时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278426/

相关文章:

powershell - (PowerShell) 记录异常并继续(Active Directory 模块)

python - 仅捕获 Python 中的一些运行时错误

python - Jupyter notebook python 在 Windows 10 上崩溃

python - 如何在django中循环访问用户对象

java - 尝试按 },{ 分割时出现 PatternSyntaxException

java - Try-Catch 异常处理不提供正确的响应

python - Seaborn猫图: change position on x axis

python - 无法连接 'str' 和 'int' 对象,但我可以通过我自己的 IDLE 正常运行它?

eclipse - 没有错误,但代码无法运行,应用程序启动方法 JavaFX 中出现异常

java - 为什么在 Java 7 中可以捕获 IOException,即使永远不会抛出 IOException