Registra un errore con le informazioni di debug in Python

Najwa Riyaz 30 gennaio 2023
  1. Usa il metodo exception() per registrare un errore con informazioni dettagliate sul debug in Python
  2. Usa il metodo exception() con stack_info per registrare un errore con informazioni di debug dettagliate in Python 3.2+
  3. Usa il metodo exception() con exc_info per registrare un errore con informazioni di debug dettagliate in Python 3.5+
Registra un errore con le informazioni di debug in Python

Questo articolo spiega come registrare un errore con informazioni di debug dettagliate in Python.

Per visualizzare informazioni di debug dettagliate, importa la libreria logging in Python e utilizza il metodo logging.exception(). Verrà visualizzato il messaggio di errore e la traccia dello stack.

Sappiamo che la stringa di eccezione ti aiuterà a capire l’errore esatto che si è verificato in Python. Oltre a questo, possiamo determinare informazioni dettagliate sull’eccezione e sulla riga di codice che ha generato l’eccezione.

Chiama il metodo logging.exception() all’interno del blocco di codice except; questo aiuta a visualizzare una traccia dello stack con il messaggio di errore. Su questo registratore registra il messaggio con il livello ERROR. Le informazioni sull’eccezione vengono aggiunte al messaggio di registrazione.

Usa il metodo exception() per registrare un errore con informazioni dettagliate sul debug in Python

Ecco un esempio che dimostra come registrare un errore con informazioni di debug dettagliate in 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)

Produzione:

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

Si noti che nell’output vengono visualizzate le informazioni dettagliate relative all’errore come elencato di seguito.

  • Menziona il modulo/funzione in cui si è verificato l’errore. In questo esempio, l’output mostra che l’errore si è verificato all’interno del metodo fnc_divide().
  • Indica il numero di riga in cui si è verificato l’errore. In questo esempio, l’output mostra che l’errore si è verificato sulla riga numero 4.
  • Menziona l’errore esatto. In questo esempio, è ZeroDivisionError: division by zero.

Usa il metodo exception() con stack_info per registrare un errore con informazioni di debug dettagliate in Python 3.2+

Da Python 3.2+, puoi passare l’argomento stack_info come True. Mostra come sei arrivato a un punto particolare nel codice; questo vale anche quando non vengono sollevate eccezioni.

Se stack_info è True, le informazioni sullo stack vengono aggiunte al messaggio di registrazione, più la chiamata di registrazione effettiva, e sono associate ai frame dello stack in ordine. L’ordine va dal fondo dello stack fino alla chiamata di registrazione nel thread corrente.

Guarda questo codice di esempio qui sotto.

import logging


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


fnc_dividestack(4)

Produzione:

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)

Usa il metodo exception() con exc_info per registrare un errore con informazioni di debug dettagliate in Python 3.5+

Da Python 3.5+, puoi passare un’istanza di eccezione nell’argomento exc_info. Questo parametro accetta istanze di eccezione.

Nota che la tupla exc_info contiene le informazioni sull’eccezione corrente se si verifica un’eccezione; altrimenti, tiene None. Di seguito è riportato un esempio che dimostra questo 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)

Produzione:

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

Articolo correlato - Python Logging