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 相关文章推荐
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
python爬取淘宝商品详情页数据
Feb 23 Python
python re模块的高级用法详解
Jun 06 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python:接口间数据传递与调用方法
Dec 17 Python
详解爬虫被封的问题
Apr 23 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
pandas中对文本类型数据的处理小结
Nov 01 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
初学Javascript的一些总结
2008/11/03 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python内置数据类型详解
2014/08/18 Python
Python创建xml文件示例
2017/03/22 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python实现维吉尼亚加密法
2019/03/20 Python
python3实现弹弹球小游戏
2019/11/25 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
社团成立邀请函
2014/01/08 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
教研活动主持词
2015/07/03 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
Redis命令处理过程源码解析
2022/02/12 Redis
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技