traceback模塊被用來跟蹤異常返回信息. 如下例所示:
- import traceback
- try:
- raise SyntaxError, "traceback test"
- except:
- traceback.print_exc()
將會在控制臺輸出類似結果:
- Traceback (most recent call last):
-
- File "H:/PythonWorkSpace/Test/src/TracebackTest.py", line 3, in <module>
-
- raise SyntaxError, "traceback test"
-
- SyntaxError: traceback test
類似在你沒有捕獲異常時候, 解釋器所返回的結果.
你也可以傳入一個文件, 把返回信息寫到文件中去, 如下:
- import traceback
- import StringIO
- try:
- raise SyntaxError, "traceback test"
- except:
- fp = StringIO.StringIO() #創建內存文件對象
- traceback.print_exc(file=fp)
- message = fp.getvalue()
- print message
這樣在控制臺輸出的結果和上面例子一樣
traceback模塊還提供了extract_tb函數來格式化跟蹤返回信息, 得到包含錯誤信息的列表, 如下:
- import traceback
- import sys
-
- def tracebacktest():
- raise SyntaxError, "traceback test"
- try:
- tracebacktest()
- except:
- info = sys.exc_info()
- for file, lineno, function, text in traceback.extract_tb(info[2]):
- print file, "line:", lineno, "in", function
- print text
- print "** %s: %s" % info[:2]
控制臺輸出結果如下:
- H:/PythonWorkSpace/Test/src/TracebackTest.py line: 7 in <module>
-
- tracebacktest()
-
- H:/PythonWorkSpace/Test/src/TracebackTest.py line: 5 in tracebacktest
-
- raise SyntaxError, "traceback test"
-
- ** <type 'exceptions.SyntaxError'>: traceback test
Example 2-18 展示了 traceback 模塊允許你在程序里打印異常的跟蹤返回 (Traceback)信息, 類似未捕獲異常時解釋器所做的. 如 Example 2-18 所示. 2.11.0.1. Example 2-18. 使用 traceback 模塊打印跟蹤返回信息 File: traceback-example-1.py # note! import
Example 2-18 展示了 traceback 模塊允許你在程序里打印異常的跟蹤返回 (Traceback)信息, 類似未捕獲異常時解釋器所做的. 如 Example 2-18 所示.
2.11.0.1. Example 2-18. 使用 traceback 模塊打印跟蹤返回信息
- File: traceback-example-1.py
-
- # importing the traceback module messes up the
- # exception state, so you better do that here and not
- # in the exception handler
- # 導入 traceback 會清理掉異常狀態, 所以
- # 最好別在異常處理代碼中導入該模塊
- import traceback
-
- try:
- raise SyntaxError, "example"
- except:
- traceback.print_exc()
- Traceback (innermost last):
-
- File "traceback-example-1.py", line 7, in ?
-
- SyntaxError: example
Example 2-19 使用 StringIO 模塊將跟蹤返回信息放在字符串中.
2.11.0.2. Example 2-19. 使用 traceback 模塊將跟蹤返回信息復制到字符串
File: traceback-example-2.py
- import traceback
- import StringIO
-
- try:
- raise IOError, "an i/o error occurred"
- except:
- fp = StringIO.StringIO()
- traceback.print_exc(file=fp)
- message = fp.getvalue()
-
- print "failure! the error was:", repr(message)
- failure! the error was: 'Traceback (innermost last):/012 File
-
- "traceback-example-2.py", line 5, in ?/012IOError: an i/o error
-
- occurred/012'
你可以使用 extract_tb 函數格式化跟蹤返回信息, 得到包含錯誤信息的列表, 如 Example 2-20 所示.
2.11.0.3. Example 2-20. 使用 traceback Module 模塊編碼 Traceback 對象
File: traceback-example-3.py
- import traceback
- import sys
-
- def function():
- raise IOError, "an i/o error occurred"
-
- try:
- function()
- except:
- info = sys.exc_info()
- for file, lineno, function, text in traceback.extract_tb(info[2]):
- print file, "line", lineno, "in", function
- print "=>", repr(text)
- print "** %s: %s" % info[:2]
- traceback-example-3.py line 8 in ?
-
- => 'function()'
-
- traceback-example-3.py line 5 in function
-
- => 'raise IOError, "an i/o error occurred"'
-
- ** exceptions.IOError: an i/o error occurred
文章來自 http://docs.python.org/dev/library/traceback.html