python标准库介绍——24回溯模块详解
= = traceback module = =[Example 2-18 # eg-2-18]显示``` trace back ``模块允许您在程序中打印异常的跟踪返回。
(回溯)信息,类似于没有捕获到异常时的信息。 ......
==traceback 模块==
[Example 2-18 #eg-2-18] 展示了 ``traceback`` 模块允许你在程序里打印异常的跟踪返回
(Traceback)信息, 类似未捕获异常时解释器所做的. 如 [Example 2-18 #eg-2-18] 所示.
====Example 2-18. 使用 traceback 模块打印跟踪返回信息====[eg-2-18]
```
File: traceback-example-1.py
# note! 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()
*B*Traceback (innermost last):
File 'traceback-example-1.py', line 7, in ?
SyntaxError: example*b*
```
[Example 2-19 #eg-2-19] 使用 ``StringIO`` 模块将跟踪返回信息放在字符串中.
====Example 2-19. 使用 traceback 模块将跟踪返回信息复制到字符串====[eg-2-19]
```
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)
*B*failure! the error was: 'Traceback (innermost last):12 File
'traceback-example-2.py', line 5, in ?12IOError: an i/o error
occurred012'*b*
```
你可以使用 ``extract_tb`` 函数格式化跟踪返回信息, 得到包含错误信息的列表,
如 [Example 2-20 #eg-2-20] 所示.
====Example 2-20. 使用 traceback Module 模块编码 Traceback 对象====[eg-2-20]
```
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]
*B*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*b*
```