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实现搜索本地文件信息写入文件的方法
Feb 22 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python利用lxml读写xml格式的文件
Aug 10 Python
用python与文件进行交互的方法
Mar 01 Python
python 图像平移和旋转的实例
Jan 10 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
python语言基本语句用法总结
Jun 11 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python中and和or如何使用
May 28 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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 判断变量类型实现代码
2009/10/23 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python中使用中文的方法
2011/02/19 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
python实现推箱子游戏
2020/03/25 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python错误的处理方法
2020/06/23 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
党员先进事迹材料
2014/12/19 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
2019银行竞聘书
2019/06/21 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL