Python使用sys.exc_info()方法获取异常信息

 更新时间:2020年07月23日 11:04:51   作者:bashliuhe  
这篇文章主要介绍了Python使用sys.exc_info()方法获取异常信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要借助更详细的异常信息才能解决问题。

捕获异常时,有 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)
其他异常...

可以看到,输出信息中包含了更多的异常信息,包括文件名、抛出异常的代码所在的行数、抛出异常的具体代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 18个Python脚本可加速你的编码速度(提示和技巧)

    18个Python脚本可加速你的编码速度(提示和技巧)

    Python的可读性和设计简单性是其广受欢迎的两个主要原因。文中通过实例给大家介绍的很清楚,本文重点给大家分享18个Python脚本可加速你的编码速度,感兴趣的朋友一起看看吧
    2019-10-10
  • 使用python3.0 对接美团接口的实现示例

    使用python3.0 对接美团接口的实现示例

    本文主要介绍了python3.0 对接美团接口的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 解决python的空格和tab混淆而报错的问题

    解决python的空格和tab混淆而报错的问题

    这篇文章主要介绍了解决python的空格和tab混淆而报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • python requests使用socks5的例子

    python requests使用socks5的例子

    今天小编就为大家分享一篇python requests使用socks5的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python超简单解决约瑟夫环问题

    python超简单解决约瑟夫环问题

    这篇文章主要介绍了python超简单解决约瑟夫环问题的方法,详细描述的约瑟夫环问题的描述与Python解决方法,需要的朋友可以参考下
    2015-05-05
  • Pytorch使用CUDA流(CUDA stream)的实现

    Pytorch使用CUDA流(CUDA stream)的实现

    本文主要介绍了Pytorch使用CUDA流(CUDA stream)的实现,CUDA流是在GPU上并行执行操作的一种机制,通过使用CUDA流,可以将不同的操作分配给不同的流,在不同的流上并行执行这些操作,从而提高代码的性能
    2023-12-12
  • python中函数总结之装饰器闭包详解

    python中函数总结之装饰器闭包详解

    下面小编就为大家带来一篇python中函数总结之装饰器闭包详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • python神经网络TensorFlow简介常用基本操作教程

    python神经网络TensorFlow简介常用基本操作教程

    这篇文章主要介绍了python神经网络入门TensorFlow简介常用基本操作教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    这篇文章主要介绍了Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法,需要的朋友可以参考下
    2018-09-09
  • python UDP(udp)协议发送和接收的实例

    python UDP(udp)协议发送和接收的实例

    今天小编就为大家分享一篇python UDP(udp)协议发送和接收的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论