Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Gestire le eccezioni

g
giac (2790 points)
10 14 27
in Programmare in Python by (2.8k 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)
337 views

2 Answers

saidai (1400 points)
1 2 14
by (1.4k 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 (21510 points)
1 2 79
by (21.5k 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)
10 14 27
by (2.8k 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
by (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 (21510 points)
1 2 79
by (21.5k 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