Python使用sys.exc_info()方法获取异常信息


Posted in Python onJuly 23, 2020

在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要借助更详细的异常信息才能解决问题。

捕获异常时,有 2 种方式可获得更多的异常信息,分别是:

  • 使用 sys 模块中的 exc_info 方法;
  • 使用 traceback 模块中的相关函数。

本节首先介绍如何使用 sys 模块中的 exc_info() 方法获得更多的异常信息。

有关 sys 模块更详细的介绍,可阅读《Python sys模块》。

模块 sys 中,有两个方法可以返回异常的全部信息,分别是 exc_info() 和 last_traceback(),这两个函数有相同的功能和用法,本节仅以 exc_info() 方法为例。

exc_info() 方法会将当前的异常信息以元组的形式返回,该元组中包含 3 个元素,分别为 type、value 和 traceback,它们的含义分别是:

  • type:异常类型的名称,它是 BaseException 的子类(有关 Python 异常类,可阅读《Python常见异常类型》一节)
  • value:捕获到的异常实例。
  • traceback:是一个 traceback 对象

代码示例:

使用 sys 模块之前,需使用 import 引入
import sys
try:
 x = int(input("请输入一个被除数:"))
 print("30除以",x,"等于",30/x)
except:
 print(sys.exc_info())
 print("其他异常...")

当输入 0 时,程序运行结果为:

请输入一个被除数:0
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x000001FCF638DD48>)
其他异常...

输出结果中,第 2 行是抛出异常的全部信息,这是一个元组,有 3 个元素,第一个元素是一个 ZeroDivisionError 类;第 2 个元素是异常类型 ZeroDivisionError 类的一个实例;第 3 个元素为一个 traceback 对象。其中,通过前 2 个元素可以看出抛出的异常类型以及描述信息,对于第 3 个元素,是一个 traceback 对象,无法直接看出有关异常的信息,还需要对其做进一步处理。

要查看 traceback 对象包含的内容,需要先引进 traceback 模块,然后调用 traceback 模块中的 print_tb 方法,并将 sys.exc_info() 输出的 traceback 对象作为参数参入。例如:

#使用 sys 模块之前,需使用 import 引入
import sys
#引入traceback模块
import traceback
try:
 x = int(input("请输入一个被除数:"))
 print("30除以",x,"等于",30/x)
except:
 #print(sys.exc_info())
 traceback.print_tb(sys.exc_info()[2])
 print("其他异常...")

输入 0,程序运行结果为:

请输入一个被除数:0
File "C:\Users\mengma\Desktop\demo.py", line 7, in <module>
print("30除以",x,"等于",30/x)
其他异常...

可以看到,输出信息中包含了更多的异常信息,包括文件名、抛出异常的代码所在的行数、抛出异常的具体代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
跟老齐学Python之从if开始语句的征程
Sep 14 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
python开发之thread线程基础实例入门
Nov 11 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python实现批量解析邮件并下载附件
Jun 19 Python
python判断完全平方数的方法
Nov 13 Python
python实现扫描ip地址的小程序
Apr 16 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
Python内置函数locals和globals对比
Apr 28 Python
浅谈python中的多态
Jun 15 Python
Python中Selenium库使用教程详解
Jul 23 #Python
Python基于traceback模块获取异常信息
Jul 23 #Python
Python TestSuite生成测试报告过程解析
Jul 23 #Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 #Python
Python分类测试代码实例汇总
Jul 23 #Python
基于Python3读写INI配置文件过程解析
Jul 23 #Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 #Python
You might like
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
override和overload的区别
2016/03/09 面试题
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
关于运动会广播稿50字
2014/10/18 职场文书
中秋客户感谢信
2015/01/22 职场文书
鲁迅故里导游词
2015/02/05 职场文书
创卫工作总结2015
2015/04/22 职场文书
新人入职感言
2015/07/31 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers