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中分数的相关使用教程
Mar 30 Python
实例介绍Python中整型
Feb 11 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
使用python 写一个静态服务(实战)
Jun 28 Python
简单了解Python读取大文件代码实例
Dec 18 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
Django视图类型总结
Feb 17 Python
详解Python内置模块Collections
Mar 22 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版自动生成文章摘要
2008/07/23 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
类似框架的js代码
2006/11/09 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
js实现密码强度检验
2017/01/15 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python教程之全局变量用法
2016/06/27 Python
简单了解python关系(比较)运算符
2019/07/08 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
小结Python的反射机制
2020/09/28 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
python基于win32api实现键盘输入
2020/12/09 Python
如何写出好的Java代码
2014/04/25 面试题
乡镇爱国卫生月活动总结
2014/06/25 职场文书
工厂见习报告范文
2014/10/31 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
运动会通讯稿600字
2015/07/20 职场文书
《失物招领》教学反思
2016/02/20 职场文书
导游词之张家界
2019/10/31 职场文书
Python django中如何使用restful框架
2021/06/23 Python