Python - Gestione avanzata delle eccezioni

Sommario
Una volta sollevata un'eccezione è nostro dovere poterla gestire, in questo modo il nostro programma potrà eseguire un'azione, sollevare un messaggio, richiedere la correzione del parametro inserito dall'utente, insomma tante possibilità .
Catturare le eccezioni
Come abbiamo detto prima, l'importante quando vediamo un'eccezione è essere in grado di catturarla in questo modo possiamo decidere cosa dovrebbe fare il programma una volta che si verifica questa situazione, per farlo useremo i comandi prova / eccetto. Per dimostrare quanto sopra, analizzeremo un programma di divisione molto semplice, poiché sappiamo che non possiamo dividere un numero per 0, quindi questo genererà un'eccezione.
Iniziamo a costruire il nostro codice, ricorda che possiamo farlo in qualsiasi editor di testo e dobbiamo salvare il file con estensione .py in modo da poterlo eseguire sulla nostra riga di comando o console.
 x = input ('Inserisci il primo numero:') y = input ('Inserisci il secondo numero:') print x / y [/ size] [size = 4]

Questo funzionerà abbastanza correttamente fino a quando l'utente non immette il valore 0 come secondo argomento, questo genererà un'eccezione come possiamo vedere nella seguente immagine dell'esecuzione di questo programma:

Possiamo evitarlo usando il prova / tranne che avevamo visto all'inizio di questa sezione, vediamo il nostro codice corretto:
 try: x = input ('Inserisci il primo numero:') y = input ('Inserisci il secondo numero:') print x / y tranne ZeroDivisionerror: print "Il secondo numero non può essere zero!" 

Questo modo di affrontare questo caso è abbastanza pulito, nonostante tutto si potrebbe anche dire che con un semplice Se che condizionerebbe che il valore di Non sarebbe 0 sarebbe una soluzione adeguata, tuttavia se aggiungessimo più divisioni al nostro programma avremmo bisogno di più condizionali, invece in questo modo abbiamo bisogno solo di un singolo gestore della possibile eccezione che viene generata.
Cattura più di un'eccezione
Continuando con l'esempio della divisione su cui abbiamo lavorato, vediamo cosa succederebbe se invece di uno 0 inserissimo qualcos'altro:

Nell'immagine possiamo vedere che è stato inserito un testo e il nostro gestore che si aspettava solo un'eccezione del tipo ZeroDivisionerror non è stato possibile eseguire la corretta gestione in quanto non sapeva cosa fare con la nuova eccezione generata.
Per catturare la nuova eccezione, aggiungeremo semplicemente un nuovo blocco tranne essere in grado di gestire l'eccezione TypeError che viene generato dividendo un numero per un testo.
Vediamo il nostro codice corretto:
 try: x = input ('Inserisci il primo numero:') y = input ('Inserisci il secondo numero:') print x / y tranne ZeroDivisionerror: print "Il secondo numero non può essere zero!" tranne TypeError: print "Quello non era un numero, vero?" 

Se avessimo scelto di usare i condizionali Se, questo compito ci avrebbe richiesto molte più righe di codice, oltre a rendere il nostro programma meno leggibile.
Catturare due eccezioni nello stesso blocco
Se ciò di cui abbiamo bisogno è catturare diverse eccezioni in un singolo blocco tranne quello che dobbiamo fare è aggiungerli nella dichiarazione all'interno di una parentesi, vediamo il codice per capirlo meglio:
[/ size] try: x = input ('Inserisci il primo numero:') y = input ('Inserisci il secondo numero:') print x / y tranne ZeroDivisionerror: print "Il secondo numero non può essere zero!" tranne TypeError: [/ size] [size = 4] print "Non era un numero, vero?" 

Come abbiamo potuto vedere, qualunque cosa accada, l'applicazione continuerà a inviarci lo stesso messaggio sia che venga inserito uno 0 sia che venga inserito qualcosa di diverso da un numero.Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave