Python 3 中是否有標準的異常鏈處理方式?


在處理一個異常“A”的過程中,可能會發生另一個異常“B”。在 Python 2.0 版本中,如果發生這種情況,異常 B 會向外傳播,而異常 A 會丟失。為了除錯問題,瞭解這兩個異常都很有用。

有時,異常處理程式需要故意重新引發異常,無論是為了提供額外資訊還是將異常轉換為另一種型別。`__cause__` 屬性提供了一種顯式記錄異常直接原因的方法。

異常鏈僅在 Python 3 中可用。Python 3 使用 `raise ... from` 語句來鏈式處理異常。我們使用 `raise..from` 語句改寫了給定的程式碼,如下所示。

try:
s = {‘a’:1, ‘b’:2}['c']
except KeyError as e:
raise ValueError('failed') from e

Python 3 預設會顯示異常處理期間發生的所有異常,如下所示。

Traceback (most recent call last):
File "source_file.py", line 2, in <module>
s = {'a':1, ‘b’:2}['c']
KeyError: 'c'

上述異常是以下異常的直接原因。

Traceback (most recent call last):
File "source_file.py", line 4, in <module>
raise ValueError('failed') from e
ValueError: failed

更新於:2019年9月27日

232 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告