【发布时间】:2011-09-10 19:53:00
【问题描述】:
在以下代码中引发第二个异常 (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(最近一次调用最后一次):
文件“raising_more_exceptions.py”,第 6 行,在
提高A('第一')
__main__.A:首先
在处理上述异常的过程中,又出现了一个异常:
回溯(最近一次通话最后):
文件“raising_more_exceptions.py”,第 8 行,在
提高 B('第二')
__main__.B:第二个
但如果X = B 我得到:
秒
问题
- 我的第一个异常去哪儿了?
- 为什么只能捕获最外层的异常?
- 如何剥离最外层的异常并重新引发早期的异常?
更新0
这个问题专门针对 Python 3,因为它的异常处理与 Python 2 完全不同。
【问题讨论】:
-
答案似乎忽略了这样一个事实,即当没有捕获到异常时,我仍然可以获得完整的回溯。请解释一下?
标签: python exception exception-handling python-3.x