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实现一个大数据搜索引擎
Nov 28 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
详解python中asyncio模块
Mar 03 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
python多任务之协程的使用详解
Aug 26 Python
通过实例学习Python Excel操作
Jan 06 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python根据字典的键来删除元素的方法
Aug 16 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和ASP.NET的10大对比!
2015/12/24 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
百度地图api如何使用
2015/08/03 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
python基于event实现线程间通信控制
2020/01/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
教师自我剖析材料(群众路线)
2014/09/29 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang