Posted on 2008-03-07 18:01
pts 閱讀(1258)
評論(0) 編輯 收藏 所屬分類:
Python
traceback 的處理
from::Limodou的學習記錄
trackback在 Python 中非常有用,它可以顯示出現異常(Exception)時代碼執行棧的情況。 但當我們捕捉異常,一般是自已的出錯處理,因此代碼執行棧的信息就看不到了,如果還想顯 示的話,就要用到traceback模塊了。
這里只是簡單的對traceback模塊的介紹,不是一個完整的說明,而且只是滿足我個人的要求, 更詳細的還是要看文檔。
打印完整的traceback
讓我們先看一個traceback的顯示:
>>> 1/0
Traceback (most recent call last):
File "", line 1, in -toplevel-
1/0
ZeroDivisionError: integer division or modulo by zero
可以看出 Python 缺省顯示的traceback有一個頭:第一行,出錯詳細位置:第二、三行, 異常信息:第四行。也就是說分為三部分,而在traceback可以分別對這三部分進行處理。 不過我更關心完整的顯示。
在traceback中提供了print_exc([limit[, file]])函數可以打印出與上面一樣的效果。 limit參數是限定代碼執行棧的條數,file參數可以將traceback信息輸出到文件對象中。缺省的話是輸出到錯誤輸出中。舉例:
>>> try:
1/0
except:
traceback.print_exc()
Traceback (most recent call last):
File "", line 2, in ?
ZeroDivisionError: integer division or modulo by zero
當出現異常sys.exc_info()函數會返回與異常相關的信息。如:
>>> try:
1/0
except:
sys.exc_info()
(<class exceptions.ZeroDivisionError at 0x00BF4CC0>,
<exceptions.ZeroDivisionError instance at 0x00E29DC8>,
<traceback object at 0x00E29DF0>)
sys.exc_info()返回一個tuple,異常類,異常實例,和traceback。
print_exc()是直接輸出了,如果我們想得到它的內容,如何做?使用 format_exception(type, value, tb [,limit]),type, value, tb分別對應 sys.exc_info()對應的三個值。如:
>>> try:
1/0
except:
type, value, tb = sys.exc_info()
print traceback.format_exception(type, value, tb)
['Traceback (most recent call last):\n', ' File "", line 2, in ?\n',
'ZeroDivisionError: integer division or modulo by zero\n']
這樣,我們知道了format_exception返回一個字符串列表,這樣我們就可以將其應用到我們的程序中了。