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远程登录代码
Apr 29 Python
Python 字符串中的字符倒转
Sep 06 Python
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
Python重新引入被覆盖的自带function
Jul 16 Python
Python中%r和%s的详解及区别
Mar 16 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Python API len函数操作过程解析
Mar 05 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
如何用python 操作zookeeper
Dec 28 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获取当前网址及域名的实现代码
2013/06/23 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
php 中的closure用法详解
2017/06/12 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Django分页功能的实现代码详解
2019/07/29 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
大四自我鉴定范文
2013/10/06 职场文书
考试不及格的检讨书
2014/01/22 职场文书
党员志愿者活动方案
2014/08/28 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
初中政治教学工作总结
2015/08/13 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
使用Django框架创建项目
2022/06/10 Python