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 相关文章推荐
python3序列化与反序列化用法实例
May 26 Python
python中的lambda表达式用法详解
Jun 22 Python
python 计算文件的md5值实例
Jan 13 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
python可视化实现代码
Jan 15 Python
python读文件的步骤
Oct 08 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
numba提升python运行速度的实例方法
Jan 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
php实现比较全的数据库操作类
2015/06/18 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
javascript window对象属性整理
2009/10/24 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
深入理解Python中的super()方法
2017/11/20 Python
Python 12306抢火车票脚本
2018/02/07 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
python关于倒排列的知识点总结
2020/10/13 Python
聚美优品励志广告词
2014/03/14 职场文书
社会工作专业求职信
2014/07/15 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
道歉短信大全
2015/05/12 职场文书
首次购房证明
2015/06/19 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
python字符串的一些常见实用操作
2022/04/06 Python