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
。我相信如果你只是删除参数,你会得到你正在寻找的结果。
基于文档: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()
使用的。
一个可重现的例子:
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
。我相信如果你只是删除参数,你会得到你正在寻找的结果。
基于文档: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()
使用的。