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 22 Python
python实现数组插入新元素的方法
May 22 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
Oct 07 Python
python之super的使用小结
Aug 13 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python 实现矩阵按对角线打印
Nov 29 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
Django自定义列表 models字段显示方式
Apr 03 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
浅析Python 字符编码与文件处理
Sep 24 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
为你总结一些php信息函数
2015/10/21 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
工程类专业自荐信范文
2014/03/09 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
小学校长开学致辞
2015/07/29 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书