CodeGym /Corso Java /Python SELF IT /Errori durante l'esecuzione del programma

Errori durante l'esecuzione del programma

Python SELF IT
Livello 17 , Lezione 0
Disponibile

1.1 Emergere di un errore

Gli errori (e le eccezioni) sono parte integrante della programmazione. Si verificano quando il programma si imbatte in situazioni inaspettate che non può gestire. In Python c'è un sistema di gestione delle eccezioni che permette di intercettare e gestire gli errori, prevenendo la chiusura del programma.

Le eccezioni si verificano più frequentemente nelle seguenti situazioni:

Errori sintattici:

Questi errori vengono individuati nella fase di compilazione del codice e sono legati alla grammatica sbagliata del linguaggio Python. Ad esempio, due punti mancanti o parole chiave errate.


if True:
    print("Hello")
        

Errori di runtime (Runtime Errors):

Questi errori si verificano durante l'esecuzione del programma e possono essere causati da varie ragioni, come la divisione per zero, l'accesso a un indice di lista inesistente, l'uso scorretto di tipi di dati e così via.


print(1 / 0)  # ZeroDivisionError
        

Errori logici:

Questi errori si verificano quando il programma funziona senza intoppi, ma fornisce un risultato errato a causa di un errore nella logica del programma. Gli errori logici non causano eccezioni, e sono più difficili da correggere.

Gli errori logici vengono solitamente chiamati bug — come se fossero una sorta di piccolo difetto nel funzionamento del programma. Gli errori di runtime sono chiamati eccezioni. Per ogni tale errore, Python crea un oggetto speciale (eccezione) e lo "lancia" nel programma...

1.2 Il percorso delle eccezioni

Quando in Python si verifica un'eccezione, questa viene sollevata attraverso lo stack delle chiamate finché non viene gestita. Lo stack delle chiamate rappresenta la sequenza delle chiamate delle funzioni che hanno portato al verificarsi dell'eccezione.

Meccanismo di sollevamento delle eccezioni

  • Verifica dell'eccezione: Quando si verifica un errore, Python crea un oggetto eccezione.
  • Ricerca dell'handler per l'eccezione: L'interprete Python inizia la ricerca di un handler nel blocco di codice corrente. Se l'handler non viene trovato, passa al blocco di codice successivo che ha chiamato la funzione corrente.
  • Sollevamento dell'eccezione attraverso lo stack: Questo processo si ripete finché non viene trovato un handler o lo stack delle chiamate si esaurisce.
  • Terminazione del programma: Se non viene trovato un handler, il programma termina e viene visualizzato un messaggio di errore.

Esempio:


def func_a():
    func_b()
        
def func_b():
    func_c()
        
def func_c():
    print(1 / 0)  # Qui si verifica l'eccezione ZeroDivisionError
        
func_a()
        

In questo esempio, l'eccezione ZeroDivisionError si verifica nella funzione func_c, poi viene sollevata attraverso lo stack delle chiamate passando per func_b e func_a. Se non viene trovato nessun handler, il programma terminerà con un errore.

1.3 Lettura del log

Quando il programma termina a causa di un'eccezione non gestita, Python visualizza una traccia dello stack (traceback), che aiuta gli sviluppatori a capire cosa è andato storto. La traccia dello stack contiene informazioni sulla sequenza delle chiamate delle funzioni che hanno portato al verificarsi dell'eccezione, e può essere analizzata per il debugging del programma.

Esempio di traccia dello stack


Traceback (most recent call last):
    File "example.py", line 10, in 
        func_a()
File "example.py", line 2, in func_a
    func_b()
File "example.py", line 5, in func_b
    func_c()
File "example.py", line 8, in func_c
    print(1 / 0)
ZeroDivisionError: division by zero

Analisi della traccia dello stack

  • Tipo di eccezione e messaggio: Alla fine della traccia viene indicato il tipo di eccezione e il messaggio. Nell'esempio fornito è ZeroDivisionError: division by zero.
  • Sequenza delle chiamate: La traccia dello stack mostra la sequenza delle chiamate delle funzioni. Nel nostro esempio, l'errore si è verificato nella linea print(1 / 0) nella funzione func_c, che è stata chiamata da func_b, che a sua volta è stata chiamata da func_a.
  • File e linee di codice: In ogni riga della traccia viene indicato il file e il numero della linea dove si è verificata la chiamata. Questo aiuta a trovare e correggere rapidamente l'errore nel codice.

Uso pratico della traccia dello stack

La traccia dello stack è uno strumento importante per il debugging e l'analisi dei programmi. Aiuta gli sviluppatori a capire la causa dell'errore e a trovare il posto nel codice dove si è verificato. Ecco alcuni consigli sull'uso della traccia dello stack:

  1. Lettura dal basso verso l'alto: Inizia l'analisi dalla chiamata più in basso nella traccia, poiché è il punto in cui si è verificata l'eccezione.
  2. Verifica di tutte le chiamate: Esamina tutte le chiamate nella traccia per capire il percorso attraverso il quale l'eccezione è stata propagata.
  3. Correzione del codice: Usa le informazioni della traccia per correggere il codice e prevenire errori simili in futuro.

Saprai di più sulle eccezioni nelle prossime lezioni.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION