当在以下代码中引发第二个异常(B
)时,我的第一个异常(A
)会发生什么?在Python 3中已经存在异常时引发异常
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
问题
- 我的第一个例外哪里去了?
- 为什么只有最外层的异常是可捕获的?
- 如何剥离最外层的异常并重新评估先前的异常?
Update0
这个问题专门针对Python 3中,因为它的异常处理是对Python 2
答案似乎忽略了这样一个事实,即当没有发现异常时我仍然得到完整的回溯。请解释? – 2011-06-08 14:46:35