Gestire le eccezioni

g
giac (2790 points)
7 14 27
asked Dec 2, 2021 in Programmare in Python by giac (2,790 points)
Salve, non mi risulta ben chiaro la gestione delle eccezioni. Abbiamo parlato di Raise e del costrutto try except finally, ma non ho veramente capito l'utilità: se ho un errore, un programma semplicemente non funziona; anche se trovo un errore, che posso fare se non correggere il codice? Oppure la gestione errore fa "funzionare anche se non funziona"? (scusate la domanda noob)
194 views

2 Answers

saidai (1340 points)
1 2 13
answered Dec 2, 2021 by saidai (1,340 points)
Un errore non gestito fa crashare il programma, gestendolo si puo' evitare il crash e continuare con l'esecuzione.

Inoltre sono utili per creare messaggi di errore personalizzati, che faciliterebbero di molto la vita ad un utente non esperto di informatica.
Exyss (21390 points)
1 2 79
answered Dec 2, 2021 by Exyss (21,390 points)

Come detto da @saidai, un errore non gestito fa crashare il programma completamente, mentre un errore "bloccato" dal try/catch permette al programmatore di definire il comportamento del programma nel caso in cui si vada a verificare un errore non previsto.

Immagina di aver realizzato un programma che va a lavorare con un file di grandi dimensioni. Mentre il programma sta leggendo/scrivendo sul file si verifica un errore imprevisto. A quel punto le opzioni sono due: il file non si corrompe per colpo di fortuna oppure si corrompe perdendo tutti i dati. Utilizzando un try/catch, invece, un approccio possibile potrebbe essere quello di "bloccare" l'errore temporaneamente per poi assicurarsi che il file sia chiuso e solo dopo generare manualmente l'errore tramite un raise. In questo modo il programma viene comunque terminato, però siamo sicuri che non siano accadute cose sgradevoli.

g
giac (2790 points)
7 14 27
commented Dec 2, 2021 by giac (2,790 points)
ma per esempio, il try except va messo su tutto il programma o solo su "pezzi" più ostici?
Ene (670 points)
1 2 5
commented Dec 2, 2021 by Ene (670 points)
Solo su alcuni pezzi per esempio se una riga ti fa crashare il programma attraverso il try except puoi gestirti il problema
Exyss (21390 points)
1 2 79
commented Dec 2, 2021 by Exyss (21,390 points)
Yep, tralaltro in alcuni linguaggi (ad esempio Java) è obbligatorio gestire alcuni pezzi di codice che generano eccezioni (tant'è che vengono definiti proprio Errori e non Eccezioni), poiché altrimenti il programma non viene neanche compilato