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基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python日志模块logging简介
Apr 13 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
python调用webservice接口的实现
Jul 12 Python
Python 导入文件过程图解
Oct 15 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Python天气语音播报小助手
Sep 25 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP文件操作方法汇总
2015/07/01 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
银行自荐信范文
2013/10/07 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
争先创优公开承诺书
2014/08/30 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
党员活动总结
2015/02/04 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS