You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python AttributeError: 'traceback'对象无format_exception属性排查

报错:AttributeError: 'traceback' object has no attribute 'format_exception'

复现场景

自定义全局异常钩子sys.excepthook时触发该报错,复现代码如下:

import sys
def my_excepthook(exc_type, exc_value, exc_traceback):
    print(exc_traceback.format_exception())
sys.excepthook = my_excepthook
x = 5/0

运行代码触发ZeroDivisionError时,不会正常打印除零错误,反而抛出上述属性错误。调试可确认传入的exc_traceback为traceback类型对象,仅包含tb_frame、tb_lasti、tb_lineno、tb_next四个属性,无内置方法。

问题原因

format_exception不是traceback实例对象的内置方法,它是Python标准库traceback模块提供的工具函数,二者命名相同但属于完全不同的范畴:

  • 传入excepthook的traceback对象:是栈回溯元数据的存储实例,仅记录异常发生时的调用栈位置、帧信息等原始数据,没有内置格式化相关方法
  • traceback模块的format_exception:是独立的格式化工具函数,接收异常类型、异常值、traceback对象三个入参,返回格式化后的异常文本列表

修复方法

先导入traceback标准库,调用模块下的format_exception方法并传入三个对应参数即可,修复后代码:

import sys
import traceback

def my_excepthook(exc_type, exc_value, exc_traceback):
    # 拼接格式化后的异常文本列表,输出和默认异常打印一致的内容
    print(''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)))

sys.excepthook = my_excepthook
x = 5/0

如果不需要自定义异常输出的拼接逻辑,也可以直接调用traceback.print_exception(exc_type, exc_value, exc_traceback),直接打印标准格式的异常栈,无需手动拼接字符串。

内容的提问来源于stack exchange,提问作者hydrated_showdown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:18:21