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,...
traceback模块被用来跟踪异常返回信息. 如下例所示:
1
2
3
4
5
|
import traceback
try :
raise SyntaxError, "traceback test"
except :
traceback.print_exc()
|
将会在控制台输出类似结果:
1
2
3
4
|
Traceback (most recent call last):
File "H:\PythonWorkSpace\Test\src\TracebackTest.py", line 3, in <module>
raise SyntaxError, "traceback test"
SyntaxError: traceback test
|
类似在你没有捕获异常时候, 解释器所返回的结果.
你也可以传入一个文件, 把返回信息写到文件中去, 如下:
1
2
3
4
5
6
7
8
9
|
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函数来格式化跟踪返回信息, 得到包含错误信息的列表, 如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
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 ]
|
控制台输出结果如下:
1
2
3
4
5
|
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
|
test1.py中,当分母为0的时候,调用系统退出。代码如下:
1
2
3
4
5
6
7
8
|
#!/usr/bin/python
import sys
def division(a = 1 , b = 1 ):
if b = = 0 :
print 'b eq 0'
sys.exit( 1 )
else :
return a / b
|
test2.py中,用try..except捕获异常,然后traceback.print_exc()打印。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/python
import sys
import traceback
import test1
a = 10
b = 0
try :
print test1.division(a,b)
except :
print 'invoking division failed.'
traceback.print_exc()
sys.exit( 1 )
|
执行test2.py失败抛出异常。
1
2
3
4
5
6
7
8
9
10
|
$python test2.py
execution python-2.5.1/python (enodeb/linux)
b eq 0
invoking division failed.
Traceback (most recent call last):
File "test2.py", line 10, in <module>
test1.division(a,b)
File "/home/fesu/test1.py", line 6, in division
sys.exit(1)
SystemExit: 1
|