当发生异常时,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

Python代码调试之异常回溯相关推荐

  1. python代码调试中间变量_Python代码调试的那些“最少且必要”技巧

    原标题:Python代码调试的那些"最少且必要"技巧 异常处理模块能帮助我们在运行期间处理异常信息,但Python代码还有更为基础的错误--语法错误和逻辑错误. 语法错误相对简单, ...

  2. 转:Python 代码调试技巧

    Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html

  3. 【QA】Python代码调试之解决Segmentation fault (core dumped)问题

    Python代码调试之解决Segmentation fault 问题 问题描述 排查过程 1. 定位错误, 2. 解决办法 参考资料 问题描述 Python3执行某一个程序时,报Segmentatio ...

  4. Python 代码调试二三事

    ♚ 作者王维栋,网易游戏运维与基础架构部,产品软件设计师,专注于智能监控.性能优化等领域. 本文来自<网易游戏运维平台 (neteasegameops)>微信公众号的投稿,隶属于网易游戏运 ...

  5. Python代码调试方法

    对于每个程序开发者来说,调试几乎是必备技能.常用Pycharm编辑器里的方法有Print大法.log大法,但缺少类似Matlab的变量区,给代码调试带来不便,特别是在有函数的情况下,变量无法实时查看. ...

  6. python代码调试快捷键_6. Pycharm的传参、快捷键、执行代码、调试模式

    1.通过pycharm给python程序传递参数 脚本传入的参数.多个参数这个大家都比较熟悉,就不多说了 Pycharm如何传入参数? 先来认识python的参数: sys.argv[0]脚本本身 s ...

  7. Eclipse中调试Python代码--调试FWTools2.4.7中的gdal_retile.py

    Eclipse中调试Python代码 Gdal_retile.py是用于对遥感影像创建金字塔,近期本人想读懂改程序中的代码.读懂代码的较好方式就是单步调试,但是由于之前没有学过Python语言,不但对 ...

  8. eclipse 下安装PyDev并导入faster rcnn python代码调试

    Python在算法研究应用非常广泛,最近要研究faster rcnn的python代码,就得学习python,所以就需要一个趁手的工具来看python代码,否则只是用文本编译器找代码实在是太影响效率了 ...

  9. 简单实用,Python代码调试利器

    ❝ 本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 尽管有那么多花里胡哨的debug工 ...

最新文章

  1. leetcode刷题总结(持续更新)
  2. 使用GeocodeService进行地理位置检索
  3. 【Scratch】青少年蓝桥杯_每日一题_8.09_列表
  4. 推荐几个机器学习算法及应用领域相关的中国大牛:
  5. 在.Net Core中实现一个WebSocket路由
  6. 这么奇葩搞笑的代码注释你见过吗
  7. 数据结构--队列Queue--打印杨辉三角
  8. centos基础命令 第二节
  9. Kafka配置3--Windows下配置Kafka集群
  10. java用户登录窗口怎么删除_JAVA图形界面用户登录后如何关闭登录的对话框
  11. VMware与Hyper-V不兼容
  12. ssm java当前项目路径_SSM项目中动态获取路径
  13. 2011年春月游溧阳有感
  14. Rust中国大会议程介绍:分会场 下
  15. tp5的时间查询,查询时间戳是否在某一天中
  16. Python-pvm解释器运行程序原理
  17. 如何区分正反馈,负反馈放大电路?【模电02课】
  18. 计算机启动老是检测硬盘怎么解决,开机出现硬盘检测是怎么回事 硬盘检测的解决方法...
  19. 泛微OA集成ERP,助力制造业实现供应商、销售全面数字化管理
  20. 2020 豆瓣API使用(代理方法) 解决无key方法 code 104解决方法

热门文章

  1. oracle odi 资料档案库访问期间出现未分类的异常错误,oracle学习_基本语法
  2. java扫描一个端口状态_java扫描端口,如何判断端口是用来做什么的(提供什么服务的)?...
  3. python 彩票分析_294期钱哥福彩3D预测奖号:杀号分析
  4. 使用睡袋_宝宝睡袋使用心得
  5. java乱码转中文乱码_java字节数组转换中文乱码,请求帮助
  6. php mui.picker,www MUI框架里边有很多例子教你如何使用 开发手机界面 WEB(ASP,PHP,...) 251万源代码下载- www.pudn.com...
  7. win创建linux目录,Windows与Linux上的文件创建时间
  8. debian GNU linux 版的docker 安装vi
  9. 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
  10. Job 存储和持久化 (第四部分)