当以下代码中引发第二个异常 (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
问题
- 我的第一个异常去哪儿了?
- 为什么只能捕获最外层的异常?
- 如何剥离最外层的异常并重新引发较早的异常?
更新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/