Registrar um erro com informações de depuração em Python

Najwa Riyaz 30 janeiro 2023
  1. Use o método exception() para registrar um erro com informações detalhadas de depuração em Python
  2. Use o método exception() com stack_info para registrar um erro com informações detalhadas de depuração no Python 3.2+
  3. Use o método exception() com exc_info para registrar um erro com informações detalhadas de depuração em Python 3.5+
Registrar um erro com informações de depuração em Python

Este artigo explica como registrar um erro com informações detalhadas de depuração em Python.

Para exibir informações detalhadas de depuração, importe a biblioteca logging em Python e utilize o método logging.exception(). Ele exibirá a mensagem de erro e o rastreamento da pilha.

Sabemos que a string de exceção ajudará você a entender o erro exato que ocorreu no Python. Além disso, podemos determinar informações detalhadas sobre a exceção e a linha de código que gerou a exceção.

Chame o método logging.exception() dentro do bloco de código except; isso ajuda a exibir um rastreamento de pilha com a mensagem de erro. Neste logger, ele registra a mensagem com o nível ERROR. As informações de exceção são anexadas à mensagem de registro.

Use o método exception() para registrar um erro com informações detalhadas de depuração em Python

Aqui está um exemplo que demonstra como você pode registrar um erro com informações detalhadas de depuração em 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)

Resultado:

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 na saída, as informações detalhadas são exibidas sobre o erro, conforme listado abaixo.

  • Menciona o módulo / função onde ocorreu o erro. Neste exemplo, a saída exibe que o erro ocorreu dentro do método fnc_divide().
  • Menciona o número da linha onde ocorreu o erro. Neste exemplo, a saída exibe que o erro ocorreu na linha número 4.
  • Menciona o erro exato. Neste exemplo, é ZeroDivisionError: division by zero.

Use o método exception() com stack_info para registrar um erro com informações detalhadas de depuração no Python 3.2+

No Python 3.2+, você pode passar o argumento stack_info como True. Mostra como você chegou a um ponto específico do código; este também é o caso quando nenhuma exceção é levantada.

Se stack_info for True, as informações da pilha são adicionadas à mensagem de registro, mais a chamada de registro real, e são associadas aos quadros de pilha em ordem. A ordem é da parte inferior da pilha até a chamada de registro no segmento atual.

Veja este exemplo de código abaixo.

import logging


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


fnc_dividestack(4)

Resultado:

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)

Use o método exception() com exc_info para registrar um erro com informações detalhadas de depuração em Python 3.5+

Do Python 3.5+, você pode passar uma instância de exceção no argumento exc_info. Este parâmetro aceita instâncias de exceção.

Observe que a tupla exc_info contém as informações da exceção atual se ocorrer uma exceção; caso contrário, contém None. Abaixo está um exemplo que demonstra esse processo.

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)

Resultado:

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

Artigo relacionado - Python Logging