Зарегистрируйте ошибку с помощью отладочной информации в Python

  1. Используйте метод exception() для регистрации ошибки с подробной информацией об отладке в Python
  2. Используйте метод exception() с stack_info для регистрации ошибки с подробной информацией об отладке в Python 3.2+
  3. Используйте метод exception() с exc_info для регистрации ошибки с подробной информацией об отладке в Python 3.5+

В этой статье объясняется, как регистрировать ошибку с подробной информацией об отладке в Python.

Для отображения подробной отладочной информации импортируйте библиотеку logging в Python и используйте метод logging.exception(). Он отобразит сообщение об ошибке и трассировку стека.

Мы знаем, что строка исключения поможет вам понять точную ошибку, возникшую в Python. Помимо этого, мы можем определить подробную информацию об исключении и строке кода, которая сгенерировала исключение.

Вызвать метод logging.exception() в блоке кода except; это помогает отображать трассировку стека с сообщением об ошибке. В этот регистратор записывает сообщение с уровнем ERROR. Информация об исключении добавляется к сообщению журнала.

Используйте метод exception() для регистрации ошибки с подробной информацией об отладке в Python

Вот пример, демонстрирующий, как вы можете зарегистрировать ошибку с подробной отладочной информацией в Python.

import logging
def fnc_divide(n):
    try:
        result=n/0
        print("The result=",result)

    except :
        print("The except block")
        logging.exception("The detailed error message -")

fnc_divide(5)

Выход:

The except block
ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/../a.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

Обратите внимание, что в выходных данных отображается подробная информация об ошибке, как указано ниже.

  • В нем упоминается модуль / функция, в которой произошла ошибка. В этом примере выходные данные показывают, что ошибка произошла в методе fnc_divide().
  • В нем упоминается номер строки, в которой произошла ошибка. В этом примере выходные данные показывают, что ошибка произошла в строке номер 4.
  • В нем упоминается точная ошибка. В данном примере это ZeroDivisionError: division by zero.

Используйте метод exception() с stack_info для регистрации ошибки с подробной информацией об отладке в Python 3.2+

Начиная с Python 3.2+, вы можете передать аргумент stack_info как True. Он показывает, как вы добрались до определенного места в коде; это также тот случай, когда не возникает никаких исключений.

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

Посмотрите на этот пример кода ниже.

import logging

def fnc_dividestack(n):
    try:
        result=n/0
    except Exception:
        logging.exception("The detailed error message -", stack_info=True)

fnc_dividestack(4)

Выход:

ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/Ri..error.py", line 5, in fnc_dividestack
    result=n/0
ZeroDivisionError: division by zero
Stack (most recent call last):
  File "C:/Users/Ri..error.py", line 9, in <module>
    fnc_dividestack(4)
  File "C:/Users/Ri..error.py", line 7, in fnc_dividestack
    logging.exception("The detailed error message -", stack_info=True)

Используйте метод exception() с exc_info для регистрации ошибки с подробной информацией об отладке в Python 3.5+

Начиная с Python 3.5+, вы можете передать экземпляр исключения в аргументе exc_info. Этот параметр принимает экземпляры исключений.

Обратите внимание, что кортеж exc_info содержит информацию о текущем исключении, если оно возникает; в противном случае - None. Ниже приведен пример, демонстрирующий этот процесс.

import logging
def fnc_divide(n):
    try:
        result=n/0
        print("The result=",result)

    except Exception as e:
            logging.exception('The exc_info - Zero Division error', exc_info=e)

fnc_divide(5)

Выход:

ERROR:root:The exc_info - Zero Division error
Traceback (most recent call last):
  File "C:/Users/R..ror.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

Сопутствующая статья - Python Logging

  • Вход в стандартный вывод в Python
  • Запись журналов в файл на Python