Traceback

Python SELF IT
Livello 17 , Lezione 4
Disponibile

5.1 Modulo traceback

Traceback (traceback) — è un'informazione che mostra la sequenza di chiamate a funzioni che ha portato alla generazione di un'eccezione. È uno strumento importante per il debug, poiché aiuta gli sviluppatori a capire dove e perché si è verificato un errore.

L'analisi del traceback (traceback) — è una parte importante del debug dei programmi, consentendo agli sviluppatori di capire dove e perché si è verificato un errore. Python fornisce il modulo traceback che contiene funzioni per lavorare con tracce dello stack. Questo modulo permette di estrarre, formattare e visualizzare informazioni sul traceback.

Ottenere e lavorare con il traceback

Per lavorare con il traceback, bisogna importare il modulo traceback che offre funzioni per formattare e visualizzare informazioni sulla traccia dello stack.

Esempio di ottenimento e visualizzazione del traceback:


import traceback

def function_c():
    return 1 / 0  # Questo genererà ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        print("È avvenuta un'eccezione:")
        traceback.print_exc()  # Stampa il traceback
            
function_a()

Output:


È avvenuta un'eccezione:
Traceback (most recent call last):
    File "example.py", line 12, in function_a
      function_b()
    File "example.py", line 8, in function_b
      function_c()
    File "example.py", line 4, in function_c
      return 1 / 0
ZeroDivisionError: division by zero

Funzione traceback.print_exc()

Questa funzione stampa il traceback dell'eccezione corrente nel flusso di errore standard.

Esempio:


try:
    1 / 0
except ZeroDivisionError:
    traceback.print_exc()

Funzione traceback.format_exc()

Questa funzione restituisce una stringa con il traceback formattato dell'eccezione corrente.


try:
    1 / 0
except ZeroDivisionError:
    error_message = traceback.format_exc()
    print("Traceback ottenuto come stringa:")
    print(error_message)    

Funzione traceback.extract_tb(tb)

Questa funzione estrae informazioni "raw" sulla traccia dello stack dall'oggetto della traccia (traceback object), ottenibile tramite sys.exc_info(). Restituisce una lista di frame dello stack.

5.2 Gestione e analisi del traceback

Funzione traceback.format_tb(tb)

Questa funzione restituisce una lista formattata di stringhe che rappresentano la traccia dello stack.


import sys
import traceback

def function_c():
    return 1 / 0  # Questo genererà ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError:
        tb = sys.exc_info()[2]
        formatted_tb = traceback.format_tb(tb)
        print("Traceback formattato:")
        for line in formatted_tb:
            print(line, end="")
            
function_a()

Funzione traceback.format_exception(exc_type, exc_value, exc_tb)

Questa funzione restituisce una lista completa e formattata di stringhe che rappresentano l'eccezione e la traccia dello stack.


import sys
import traceback

def function_c():
    return 1 / 0  # Questo genererà ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        exc_type, exc_value, exc_tb = sys.exc_info()
        full_tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        print("Traceback completo formattato:")
        for line in full_tb:
            print(line, end="")
            
function_a()

A volte è utile analizzare più dettagliatamente ogni frame dello stack, per ottenere informazioni specifiche sul punto in cui si è verificata l'eccezione e sul contesto di quel punto.


import traceback
import sys

def function_c():
    return 1 / 0  # Questo genererà ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError:
        tb = sys.exc_info()[2]
        for frame in traceback.extract_tb(tb):
            print(f"File: {frame.filename}")
            print(f"Linea: {frame.lineno}")
            print(f"Nome della funzione: {frame.name}")
            print(f"Testo: {frame.line}")
            print("-" * 40)
            
function_a()

5.3 Uso di traceback per il log

A volte è importante salvare le informazioni sul traceback in un file di log per un'analisi successiva. Questo è possibile utilizzando le funzioni del modulo traceback e il modulo logging standard.

Esempio:


import logging
import traceback
import sys

logging.basicConfig(filename='error.log', level=logging.ERROR)
            
def function_c():
    return 1 / 0  # Questo genererà ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        exc_type, exc_value, exc_tb = sys.exc_info()
        full_tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        logging.error("È avvenuta un'eccezione:\n%s", ''.join(full_tb))
            
function_a()

Il logging lo vedremo un po' più avanti, ma penso che queste informazioni siano state utili.

1
Опрос
Errori ed eccezioni,  17 уровень,  4 лекция
недоступен
Errori ed eccezioni
Errori ed eccezioni
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION