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
Python代码调试之异常回溯相关推荐
- python代码调试中间变量_Python代码调试的那些“最少且必要”技巧
原标题:Python代码调试的那些"最少且必要"技巧 异常处理模块能帮助我们在运行期间处理异常信息,但Python代码还有更为基础的错误--语法错误和逻辑错误. 语法错误相对简单, ...
- 转:Python 代码调试技巧
Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html
- 【QA】Python代码调试之解决Segmentation fault (core dumped)问题
Python代码调试之解决Segmentation fault 问题 问题描述 排查过程 1. 定位错误, 2. 解决办法 参考资料 问题描述 Python3执行某一个程序时,报Segmentatio ...
- Python 代码调试二三事
♚ 作者王维栋,网易游戏运维与基础架构部,产品软件设计师,专注于智能监控.性能优化等领域. 本文来自<网易游戏运维平台 (neteasegameops)>微信公众号的投稿,隶属于网易游戏运 ...
- Python代码调试方法
对于每个程序开发者来说,调试几乎是必备技能.常用Pycharm编辑器里的方法有Print大法.log大法,但缺少类似Matlab的变量区,给代码调试带来不便,特别是在有函数的情况下,变量无法实时查看. ...
- python代码调试快捷键_6. Pycharm的传参、快捷键、执行代码、调试模式
1.通过pycharm给python程序传递参数 脚本传入的参数.多个参数这个大家都比较熟悉,就不多说了 Pycharm如何传入参数? 先来认识python的参数: sys.argv[0]脚本本身 s ...
- Eclipse中调试Python代码--调试FWTools2.4.7中的gdal_retile.py
Eclipse中调试Python代码 Gdal_retile.py是用于对遥感影像创建金字塔,近期本人想读懂改程序中的代码.读懂代码的较好方式就是单步调试,但是由于之前没有学过Python语言,不但对 ...
- eclipse 下安装PyDev并导入faster rcnn python代码调试
Python在算法研究应用非常广泛,最近要研究faster rcnn的python代码,就得学习python,所以就需要一个趁手的工具来看python代码,否则只是用文本编译器找代码实在是太影响效率了 ...
- 简单实用,Python代码调试利器
❝ 本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 尽管有那么多花里胡哨的debug工 ...
最新文章
- leetcode刷题总结(持续更新)
- 使用GeocodeService进行地理位置检索
- 【Scratch】青少年蓝桥杯_每日一题_8.09_列表
- 推荐几个机器学习算法及应用领域相关的中国大牛:
- 在.Net Core中实现一个WebSocket路由
- 这么奇葩搞笑的代码注释你见过吗
- 数据结构--队列Queue--打印杨辉三角
- centos基础命令 第二节
- Kafka配置3--Windows下配置Kafka集群
- java用户登录窗口怎么删除_JAVA图形界面用户登录后如何关闭登录的对话框
- VMware与Hyper-V不兼容
- ssm java当前项目路径_SSM项目中动态获取路径
- 2011年春月游溧阳有感
- Rust中国大会议程介绍:分会场 下
- tp5的时间查询,查询时间戳是否在某一天中
- Python-pvm解释器运行程序原理
- 如何区分正反馈,负反馈放大电路?【模电02课】
- 计算机启动老是检测硬盘怎么解决,开机出现硬盘检测是怎么回事 硬盘检测的解决方法...
- 泛微OA集成ERP,助力制造业实现供应商、销售全面数字化管理
- 2020 豆瓣API使用(代理方法) 解决无key方法 code 104解决方法
热门文章
- oracle odi 资料档案库访问期间出现未分类的异常错误,oracle学习_基本语法
- java扫描一个端口状态_java扫描端口,如何判断端口是用来做什么的(提供什么服务的)?...
- python 彩票分析_294期钱哥福彩3D预测奖号:杀号分析
- 使用睡袋_宝宝睡袋使用心得
- java乱码转中文乱码_java字节数组转换中文乱码,请求帮助
- php mui.picker,www MUI框架里边有很多例子教你如何使用 开发手机界面 WEB(ASP,PHP,...) 251万源代码下载- www.pudn.com...
- win创建linux目录,Windows与Linux上的文件创建时间
- debian GNU linux 版的docker 安装vi
- 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
- Job 存储和持久化 (第四部分)