Python3生产:在不使用跟踪模块的情况下记录异常

问题描述 投票:3回答:1

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

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

python python-3.x logging production
1个回答
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模块。

© www.soinside.com 2019 - 2024. All rights reserved.