當在以下代碼中引發第二個異常(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