limodou的学习记录
limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source ...

导航

Blog统计
  • 文章 - 927
  • 收藏 - 0
  • 评论 - 2911
  • Trackbacks - 16
公告

文章

收藏

    相册

      DocBook

      python

      Pythoner in 中国

      Python开源项目

      技术

      其它

      我的东东

      我的开源项目

      存档


      正在读取评论……
       

      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返回一个字符串列表,这样我们就可以将其应用到我们的程序中了。



      Trackback: http://tb.donews.net/TrackBack.aspx?PostId=40045


      [点击此处收藏本文]  发表于2004年07月09日 10:59 AM




      正在读取评论……
      大名
      网址
      验证码
      评论