1. 程式人生 > 程式設計 >Python 捕獲程式碼中所有異常的方法

Python 捕獲程式碼中所有異常的方法

問題

怎樣捕獲程式碼中的所有異常?

解決方案

想要捕獲所有的異常,可以直接捕獲 Exception 即可:

try:
  ...
except Exception as e:
  ...
  log('Reason:',e)    # Important!

這個將會捕獲除了 SystemExitKeyboardInterruptGeneratorExit 之外的所有異常。 如果你還想捕獲這三個異常,將 Exception 改成 BaseException 即可。

討論

捕獲所有異常通常是由於程式設計師在某些複雜操作中並不能記住所有可能的異常。 如果你不是很細心的人,這也是編寫不易除錯程式碼的一個簡單方法。

正因如此,如果你選擇捕獲所有異常,那麼在某個地方(比如日誌檔案、列印異常到螢幕)列印確切原因就比較重要了。 如果你沒有這樣做,有時候你看到異常列印時可能摸不著頭腦,就像下面這樣:

def parse_int(s):
  try:
    n = int(v)
  except Exception:
    print("Couldn't parse")

試著執行這個函式,結果如下:

>>> parse_int('n/a')
Couldn't parse
>>> parse_int('42')
Couldn't parse
>>>

這時候你就會撓頭想:“這咋回事啊?” 假如你像下面這樣重寫這個函式:

def parse_int(s):
  try:
    n = int(v)
  except Exception as e:
    print("Couldn't parse")
    print('Reason:',e)

這時候你能獲取如下輸出,指明瞭有個程式設計錯誤:

>>> parse_int('42')
Couldn't parse
Reason: global name 'v' is not defined
>>>

很明顯,你應該儘可能將異常處理器定義的精準一些。 不過,要是你必須捕獲所有異常,確保列印正確的診斷資訊或將異常傳播出去,這樣不會丟失掉異常。

以上就是Python 捕獲程式碼中所有異常的方法的詳細內容,更多關於Python 捕獲異常的資料請關注我們其它相關文章!