LE ECCEZIONI IN PYTHON

Partiamo subito con un esempio riguardante le eccezioni in Python. La funzione divide il primo parametro per il secondo e ne ritorna il valore. Nel caso in cui passiamo come secondo parametro uno zero si ottiene un’eccezione in quanto Python non è in grado di eseguire la divisione per zero. Si dice che viene sollevata un’eccezione da parte del runtime di Python e il programma si interrompe.

Exception

LA GERARCHIA DI CHIAMATE

Quello che si verifica quando viene sollevata un’eccezione è illustrato nella figura a fianco. Se l’eccezione viene sollevata nella funzione f4(m,n) e non viene gestita, Python risale tutta la gerarchia di chiamate fino ad arrivare a f1(a,b) e se anche questa funzione non la gestisce  Python termina l’esecuzione del programma stampando un errore di divisione per zero.

Exception stack

GERARCHIA DI ECCEZIONI 

Le eccezioni sono oggetti, tutti gli oggetti eccezione forniti dal linguaggio o creati da noi sono istanze di classi che alla fine derivano da un’unica classe base che si chiama BaseException. La figura a fianco mostra la gerarchia di eccezioni che fa capo ad una divisione per zero.

Classi exception

LO STATEMENT TRY EXCEPT

Lo statement Try Except

Nel blocco try va messa una suite di istruzioni da controllare in quanto potrebbero generare un’eccezione. Se ciò avviene l’esecuzione del codice non si interrompe e non inizia a risalire lo stack di chiamate ma salta al blocco except dove con tutta probabilità ci sarà una suite di istruzioni che gestirà la condizione di errore.

LO STATEMENT TRY EXCEPT AS

Lo statement as ci consente di assegnare l’oggetto eccezione a un nome cosi da poterlo utilizzare nella suite di istruzioni.

Statement Try Except as

LA CLAUSOLA FINALLY

Ovviamente la slide è una esemplificazione, vanno sempre inseriti uno o più blocchi except per gestire l’eccezione. finally viene sempre eseguita indipendentemente dal fatto che si entri o meno in un blocco except. Il suo scopo è quello di liberare risorse, come ad esempio chiudere la connessione a un database.

La clausola Finally

LA CLAUSOLA ELSE

Anche else come finally è opzionale e si può inserire dopo tutte le clausole except. else viene eseguita solo se non viene sollevata un’eccezione. Se presente la clausola finally obbligatoriamente else deve essere posta prima di finally che deve essere l’ultima clausola se presente.

La clausola Else
Codice

RAISE ED ASSERT

Possiamo usare raise per sollevare appositamente un’eccezione. Exception può anche non essere presente anche se raramente accade. Questo è il primo meccanismo con cui si usa raise, cioè per sollevare un’eccezione.

Lo statement raise

Alla prima iterazione viene sollevata un’eccezione IndexError, quindi si risale tutta la gerarchia di chiamate per vedere se c’è un gestore valido. Se non viene trovato Python stampa il messaggio riportato in figura e blocca l’esecuzione del programma.

Lo statement raise

Possiamo usare anche il costruttore della classe IndexError e in tal caso il testo passato compare nel messaggio di errore. L’ultimo caso in cui si usa raise è quando catturiamo un’eccezione, ma vogliamo rilanciarla perché magari esiste un gestore da qualche altra parte, ad esempio un gestore di errori centralizzato.

Lo statement raise

In questo caso raise risolleva l’eccezione ZeroDivisionError perché magari viene gestita altrove.

Lo statement raise

LO STATEMENT ASSERT

Lo statement assert

Con assert indichiamo a Python di valutare un’espressione per vedere se è vera o falsa, se falsa viene sollevata un’eccezione di tipo AssertionError.

Lo statement assert

LE ECCEZIONI IN PYTHON LINK AL CODICE GITHUB

GITHUB

LE ECCEZIONI IN PYTHON LINK AI POST PRECEDENTI

PREVIOUS POST LINKS