2015-07-07 3 views
3

В нашем производственном коде мы заносить ошибки, как это:Python3 производства: исключения лесозаготовительного без использования модуля обратного прослеживания

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

sys.exc_info возвращает кортеж из 3 элементов, где третья - трассировка.

Возвращенный кортеж - (type, value, traceback).

Вы делаете - str(sys.exc_info()[0:2]), который выбирает только первые два элемента.

Try -

str(sys.exc_info()) 

Если вы не можете использовать модуль обратного прослеживания для форматирования отслеживающего. И если вы хотите просто номер строки, за исключением в и имя файла, вы можете использовать следующие -

sys.exc_info()[2].tb_frame.f_code.co_filename #<---- filename 
sys.exc_info()[2].tb_lineno # <------ line number 

Пожалуйста, обратите внимание, это могут быть внутренние имена, а лучше всего использовать traceback модуль.

+0

Я уже пробовал, он добавляет объект

+0

Пожалуйста, проверьте последний ответ. –

+0

Да, я действительно получаю номер строки и имя файла, бит, это не говорит мне много - мне действительно нужно отследить его до последнего вызова функции перед исключением. Есть ли способ сделать это или единственный способ - через модуль трассировки? –

 Смежные вопросы

  • Нет связанных вопросов^_^