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程序
Apr 04 Python
python提取字典key列表的方法
Jul 11 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
Python PO设计模式的具体使用
Aug 16 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
python 字典item与iteritems的区别详解
Apr 25 Python
python 6行代码制作月历生成器
Sep 18 Python
python递归函数用法详解
Oct 26 Python
python里反向传播算法详解
Nov 22 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
python自动化测试之Selenium详解
Mar 13 Python
PyTorch中的torch.cat简单介绍
Mar 17 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
数据库相关问题
2006/10/09 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
javascript中replace( )方法的使用
2015/04/24 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
如何写好升职自荐信
2014/01/06 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
优秀会计求职信
2014/07/04 职场文书
留学推荐信中文范文
2015/03/26 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
导游经典开场白——导游词
2019/04/17 职场文书