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 matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python实现猜数字小游戏
Mar 24 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
python数值基础知识浅析
Nov 19 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
Python入门之使用pandas分析excel数据
May 12 Python
Python中的 Set 与 dict
Mar 13 Python
python数字图像处理之图像的批量处理
Jun 28 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
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
jquery 指南/入门基础
2007/11/30 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
玩转python爬虫之URLError异常处理
2016/02/17 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
使用python远程操作linux过程解析
2019/12/04 Python
python opencv进行图像拼接
2020/03/27 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
python集合的新增元素方法整理
2020/12/07 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
百度软件工程师职位
2013/02/14 面试题
升国旗演讲稿
2014/09/05 职场文书
小学运动会开幕词
2015/01/28 职场文书
世界遗产的导游词
2015/02/13 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
java版 简单三子棋游戏
2022/05/04 Java/Android