Python异常模块traceback用法

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:PythonWorkSpaceTestsrcTracebackTest.py", line 3, in
     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:PythonWorkSpaceTestsrcTracebackTest.py line: 7 in
tracebacktest()
H:PythonWorkSpaceTestsrcTracebackTest.py line: 5 in tracebacktest
raise SyntaxError, "traceback test"
** : 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
     test1.division(a,b)
   File "/home/fesu/test1.py", line 6, in division
     sys.exit(1)
SystemExit: 1

你可能感兴趣的:(python)