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简单的实现树莓派的WEB控制
Feb 18 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
python enumerate函数的使用方法总结
Nov 15 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
Python如何定义接口和抽象类
Jul 28 Python
Python 线程池模块之多线程操作代码
May 20 Python
python爬虫之selenium库的安装及使用教程
May 23 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 函数使用方法与函数定义方法
2010/05/09 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php的sso单点登录实现方法
2015/01/08 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
jquery延迟对象解析
2016/10/26 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
构建一个JavaScript插件系统
2020/10/20 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
采购部部长岗位职责
2014/02/06 职场文书
车间安全生产标语
2014/06/06 职场文书
继续教育个人总结
2015/03/03 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
小学教师教学反思
2016/02/24 职场文书