海上月明

editer by sun
posts - 162, comments - 51, trackbacks - 0, articles - 8
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

traceback 的处理

Posted on 2008-03-07 18:01 pts 阅读(1254) 评论(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返回一个字符串列表,这样我们就可以将其应用到我们的程序中了。

只有注册用户登录后才能发表评论。


网站导航: