Python: One Try Multiple tranne


195

In Python, è possibile avere più exceptistruzioni per una tryistruzione? Ad esempio :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc

7
@ Eva611: non scusarti. (1) provalo. (2) pubblica una risposta alla tua domanda.
S. Lott,

6
Funziona L'ho provato con l'interprete di pitone ...
Eva611,

38
@ Eva611 Penso che la tua domanda sia andata bene. Per me è stato molto più veloce su Google piuttosto che creare un esempio nell'interprete Python, quindi sono stato felice che tu l'abbia chiesto. DrTysa e altri avrebbero dovuto semplicemente rispondere con un rapido "sì" piuttosto che sgridarti.
galante

5
Il più delle volte la tua prima ipotesi sarà sbagliata o mancherà sottili sfumature, quindi (come 15.000 altri) ho provato prima google!
Chris,

9
Ho provato Google e ho trovato questa domanda. Pertanto, sono contento che qualcun altro l'abbia chiesto in un forum così pubblico come SO, e sono abbastanza contento che altre persone vi abbiano collegato che l'algoritmo di Google lo abbia fatto apparire come il mio primo risultato.
Kingledion,

Risposte:


328

Sì, è possibile.

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

Vedi: http://docs.python.org/tutorial/errors.html

La parola chiave "as" viene utilizzata per assegnare l'errore a una variabile in modo che l'errore possa essere esaminato più approfonditamente più avanti nel codice. Si noti inoltre che le parentesi per il caso di tripla eccezione sono necessarie in Python 3. Questa pagina contiene ulteriori informazioni: Cattura più eccezioni in una riga (tranne blocco)


76
Se vuoi fare la stessa cosa in entrambi i casi, lo è except (SomeError, OtherError):. Non risponde alla domanda OP, ma potrebbe aiutare alcune persone che arrivano qui tramite Google.
Segna il

Se ad esempio devi convertire più versioni di una struttura di dati in una nuova struttura, ad esempio quando aggiorni versioni di codice, puoi nidificare try..excepts.
Rolf of Saxony,

5
Se vuoi gestire tutte le eccezioni dovresti usare al except Exception:posto di plain except:. (Plain tranne prenderà pari SystemExite KeyboardInterruptche di solito non è quello che vuoi)
polvoazul

Forse vuoi fare qualcosa eanche perché gli dai un nome :)
Ciao
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.