Registrar un error con información de depuración en Python

Najwa Riyaz 30 enero 2023
  1. Utilice el método exception() para registrar un error con información detallada de depuración en Python
  2. Utilice el método exception() con stack_info para registrar un error con información detallada de depuración en Python 3.2+
  3. Utilice el método exception() con exc_info para registrar un error con información detallada de depuración en Python 3.5+
Registrar un error con información de depuración en Python

Este artículo explica cómo registrar un error con información detallada de depuración en Python.

Para mostrar información de depuración detallada, importe la biblioteca logging en Python y utilice el método logging.exception(). Mostrará el mensaje de error y el seguimiento de la pila.

Sabemos que la cadena de excepción lo ayudará a comprender el error exacto que ocurrió en Python. Aparte de esto, podemos determinar información detallada sobre la excepción y la línea de código que generó la excepción.

Llame al método logging.exception() dentro del bloque de código except; esto ayuda a mostrar un seguimiento de la pila con el mensaje de error. En este registrador, registra el mensaje con nivel ERROR. La información de la excepción se adjunta al mensaje de registro.

Utilice el método exception() para registrar un error con información detallada de depuración en Python

Aquí hay un ejemplo que demuestra cómo puede registrar un error con información de depuración detallada en 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)

Producción :

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

Observe que en la salida, se muestra la información detallada sobre el error que se enumera a continuación.

  • Menciona el módulo / función donde ocurrió el error. En este ejemplo, la salida muestra que el error ocurrió dentro del método fnc_divide().
  • Menciona el número de línea donde ocurrió el error. En este ejemplo, la salida muestra que el error ocurrió en la línea número 4.
  • Menciona el error exacto. En este ejemplo, es ZeroDivisionError: division by zero.

Utilice el método exception() con stack_info para registrar un error con información detallada de depuración en Python 3.2+

Desde Python 3.2+, puede pasar el argumento stack_info como True. Muestra cómo llegó a un punto particular del código; este también es el caso cuando no se plantean excepciones.

Si stack_info es True, la información de la pila se agrega al mensaje de registro, más la llamada de registro real, y se asocia con los marcos de la pila en orden. El orden es desde la parte inferior de la pila hasta la llamada de registro en el hilo actual.

Mira este código de ejemplo a continuación.

import logging


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


fnc_dividestack(4)

Producción :

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)

Utilice el método exception() con exc_info para registrar un error con información detallada de depuración en Python 3.5+

Desde Python 3.5+, puede pasar una instancia de excepción en el argumento exc_info. Este parámetro acepta instancias de excepción.

Tenga en cuenta que la tupla exc_info contiene la información de la excepción actual si se produce una excepción; de lo contrario, contiene None. A continuación se muestra un ejemplo que demuestra este proceso.

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)

Producción :

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

Artículo relacionado - Python Logging