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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告