在我们的生产代码中,我们记录如下错误:
error = {'tos': str(sys.exc_info()[0:2])}
但它只允许查看有关错误的此类信息:
"tos": "(<class 'AttributeError'>, AttributeError(\"'NoneType' object has no attribute 'group'\",))"
哪个还不够 - 我希望看到包含代码的文件的行号和名称。但是,我可以使用以下代码获取该信息:
import traceback
meta['error'] = {'tos': str(traceback.format_exc())}
但我们不会在生产中使用traceback
模块,因为它被认为太重了。那么如何在不使用traceback
的情况下获取行号和文件名?
答案 0 :(得分:1)
sys.exc_info
返回3个元素的元组,其中第三个是回溯。
返回的元组就像 - (type, value, traceback)
。
你正在做 - str(sys.exc_info()[0:2])
只选择前两个元素。
尝试 -
str(sys.exc_info())
如果无法使用traceback模块格式化回溯。如果您只想要例外的行号和文件名,可以使用以下 -
sys.exc_info()[2].tb_frame.f_code.co_filename #<---- filename
sys.exc_info()[2].tb_lineno # <------ line number
请注意,这些可以是内部名称,最好是使用traceback
模块。