Python3生产:在不使用追溯模块

时间:2015-07-07 06:03:59

标签: python python-3.x logging production

在我们的生产代码中,我们记录如下错误:

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的情况下获取行号和文件名?

1 个答案:

答案 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模块。