Python3 的異常處理


Python3 的異常處理,在官方文檔的 tutorial 中有說明。

這里把常用的異常處理方法都列出來,方便平時查找。

捕獲異常基類

Python3 要求我們的異常必須繼承 Exception 類。Built-in 的所有異常也都是繼承自這個類。因此,我們只需要捕獲這個類的實例,就可以捕獲所有的異常。

try: raise except Exception as err: print(err) 

 

使用 sys.exc_info() 和 sys.last_traceback

sys.exc_info() 會返回一個3值元表,其中包含調用該命令時捕獲的異常。

這個元表的內容為 (type, value, traceback) ,其中:

  • type 從獲取到的異常中得到類型名稱,它是BaseException 的子類;
  • value 是捕獲到的異常實例;
  • traceback 是一個 traceback 對象,下面會詳述。

sys.last_traceback 包含的內容與 sys.exc_info() 相同,但它主要用於調試,並不總是被定義。

import sys try: raise except: t,v,tb = sys.exc_info() print(t,v) 

使用 traceback

trackback 模塊用來精確模仿 python3 解析器的 stack trace 行為。在程序中應該盡量使用這個模塊。

traceback.print_exc() 可以直接打印當前的異常。

import traceback try: raise except: traceback.print_exc() 

traceback.print_tb() 用來打印上面提到的 trackback 對象。

import sys,traceback try: raise except: t,v,tb = sys.exc_info() traceback.print_tb(tb) 

traceback.print_exception() 可以直接打印 sys.exc_info() 提供的元表。

import sys,traceback try: raise except: traceback.print_exception(*sys.exc_info()) 

其實,下面兩句是等價的:

  • traceback.print_exc()
  • traceback.print_exception(*sys.exc_info())

traceback 提供的參數可以將 print 的內容寫入到文件中,詳見這里:29.9. traceback — Print or retrieve a stack traceback

來源:http://zengrong.net/post/2143.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM