Python 使用 traceback.print_exc() 打印 AttributeError 的回溯时出现 TypeError

Python TypeError when printing traceback of AttributeError using traceback.print_exc()

一个可重现的例子:

import traceback
X = None
try:
    X.text
except (TypeError, AttributeError) as e:
    traceback.print_exc(e)

这将在 traceback.print_exc(e):

处引发错误

TypeError: '>=' not supported between instances of 'AttributeError' and 'int'

有什么建议为什么会这样吗?

print_exc不以异常对象为参数,它使用sys.exc_info()获取异常信息。当您传递它 e 时,它会将其解释为 limit 的位置参数,它需要类型 int。我相信如果你只是删除参数,你会得到你正在寻找的结果。

traceback.print_exc documentation

基于文档:Python Docs - traceback module

traceback.print_exc 的第一个参数也不例外,它是回溯深度的深度限制。您在 traceback 模块本身中遇到异常,因为它期望第一个参数是一个限制。

您的代码必须是:

import traceback
X = None
try:
    X.text
except (TypeError, AttributeError) as e:
    traceback.print_exc()

异常数据作为线程全局保存在 sys.exc_info() 中,这是 traceback.print_exc() 使用的。