前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python代码调试之异常回溯

Python代码调试之异常回溯

作者头像
Python小屋屋主
发布2018-04-17 10:08:40
1.1K0
发布2018-04-17 10:08:40
举报
文章被收录于专栏:Python小屋Python小屋

当发生异常时,Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这时可以使用sys模块的exc_info()函数来回溯最近一次异常。

sys.exc_info( )的返回值tuple是一个三元组(type, value, traceback),其中:

  • type —— 异常的类型
  • value —— 异常的信息或者参数
  • traceback —— 包含调用栈信息的对象

例如:

>>> 1/0

Traceback (most recent call last):

File "<pyshell#25>", line 1, in <module>

1/0

ZeroDivisionError: integer division or modulo by zero

>>> import sys

>>> try:

1/0

except:

r = sys.exc_info()

print(r)

(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x000000000375C788>)

sys.exc_info()可以直接定位最终引发异常的原因,结果也比较简洁,但是缺点是难以直接确定引发异常的代码位置。假设有如下函数定义:

>>> def A():1/0

>>> def B():A()

>>> def C():B()

直接调用函数,抛出异常:

>>> C()

Traceback (most recent call last):

File "<pyshell#35>", line 1, in <module>

C()

File "<pyshell#34>", line 2, in C

B()

File "<pyshell#31>", line 2, in B

A()

File "<pyshell#28>", line 2, in A

1/0

ZeroDivisionError: integer division or modulo by zero

使用sys.exc_info()查看异常信息时并不是非常直观:

>>> try:

C()

except:

r = sys.exc_info()

print(r)

(<type 'exceptions.ZeroDivisionError'>, ZeroDivisionError('integer division or modulo by zero',), <traceback object at 0x0134C990>)

如果需要的话,可以使用traceback模块来查看详细信息:

>>> import traceback

>>> import sys

>>> def A():1/0

>>> def B():A()

>>> def C():B()

>>> try:

C()

except:

excType, excValue, excTraceback = sys.exc_info()

traceback.print_exception(excType, excValue,

excTraceback, limit=3)

print(excValue)

traceback.print_tb(excTraceback)

Traceback (most recent call last):

File "<pyshell#44>", line 2, in <module>

File "<pyshell#42>", line 1, in C

File "<pyshell#40>", line 1, in B

ZeroDivisionError: division by zero

division by zero

File "<pyshell#44>", line 2, in <module>

File "<pyshell#42>", line 1, in C

File "<pyshell#40>", line 1, in B

File "<pyshell#38>", line 1, in A

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档