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装饰器 免去调用父类构造函数的麻烦
May 18 Python
Python set集合类型操作总结
Nov 07 Python
Python的Django框架中的表单处理示例
Jul 17 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
让代码变得更易维护的7个Python库
Oct 09 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
python滑块验证码的破解实现
Nov 10 Python
jupyter note 实现将数据保存为word
Apr 14 Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 Python
python读取excel数据并且画图的实现示例
Feb 08 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php实现图片添加水印功能
2014/02/13 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
用Python写的图片蜘蛛人代码
2012/08/27 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python dict 相同key 合并value的实例
2019/01/21 Python
如何更优雅地写python代码
2019/07/02 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
股份转让协议书
2014/04/12 职场文书
一年级评语大全
2014/04/23 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
北京英文导游词
2015/02/12 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang
Go语言怎么使用变长参数函数
2022/07/15 Golang