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

Elena
Elena
发布时间:2026-10-14 | 2人浏览过
原创

本文介绍如何在Python中通过sys模块的exc_info()方法获取详细的异常信息。该方法返回包含异常类型、实例和回溯对象的元组,结合traceback模块可打印完整的错误堆栈,包括文件名、行号及具体代码,从而辅助程序调试与问题定位。

Python异常信息获取概述

在实际程序调试过程中,仅知道异常类型往往不足以解决问题,必须借助更详尽的异常数据才能准确定位并修复错误。

在捕获异常时,主要有两种途径可以获取更丰富的异常信息:

  • 利用sys模块提供的exc_info方法;
  • 调用traceback模块中的相关函数。

本节重点讲解如何利用sys模块中的exc_info()方法来提取更多的异常详情。

如需了解sys模块的其他功能,请参考《Python sys模块》相关文档。

sys模块中提供了两个用于返回完整异常信息的函数:exc_info()和last_traceback()。两者功能与用法基本一致,本节仅以exc_info()为例进行说明。

sys.exc_info()方法详解

exc_info()方法会将当前发生的异常信息封装为一个元组返回,该元组包含三个元素: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>) 其他异常...

上述输出结果的第二行展示了完整的异常信息,这是一个包含三个元素的元组。第一个元素是ZeroDivisionError类;第二个元素是该类的具体实例,包含了错误描述;第三个元素是一个traceback对象。前两个元素足以揭示异常类型及其描述,但第三个元素作为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 相关产品和应用

全部下载

专题列表