Come posso rilevare più eccezioni in una riga (tranne il blocco)
Fai questo:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Le parentesi sono necessarie a causa della sintassi precedente che utilizzava le virgole per assegnare l'oggetto errore a un nome. La as
parola chiave viene utilizzata per l'assegnazione. Puoi usare qualsiasi nome per l'oggetto errore, preferisco error
personalmente.
La migliore pratica
Per fare ciò attualmente e in modo compatibile con Python, devi separare le Eccezioni con virgole e racchiuderle tra parentesi per differenziarle dalla sintassi precedente che ha assegnato l'istanza dell'eccezione a un nome di variabile seguendo il tipo Eccezione da intercettare con un virgola.
Ecco un esempio di utilizzo semplice:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Sto specificando solo queste eccezioni per evitare di nascondere bug, che se incontro mi aspetto la traccia dello stack completo.
Questo è documentato qui: https://docs.python.org/tutorial/errors.html
Puoi assegnare l'eccezione a una variabile, ( e
è comune, ma potresti preferire una variabile più dettagliata se hai una lunga gestione delle eccezioni o il tuo IDE evidenzia solo selezioni più grandi di quelle, come la mia.) L'istanza ha un attributo args. Ecco un esempio:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Si noti che in Python 3, l' err
oggetto non rientra nell'ambito quando il except
blocco viene concluso.
Obsoleto
È possibile che venga visualizzato un codice che assegna l'errore con una virgola. Questo utilizzo, l'unico modulo disponibile in Python 2.5 e precedenti, è obsoleto e se si desidera che il codice sia compatibile in avanti in Python 3, è necessario aggiornare la sintassi per utilizzare il nuovo modulo:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Se vedi l'assegnazione del nome virgola nella tua base di codice e stai usando Python 2.5 o versione successiva, passa al nuovo modo di farlo in modo che il tuo codice rimanga compatibile durante l'aggiornamento.
Il suppress
gestore del contesto
La risposta accettata è in realtà 4 righe di codice, minimo:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
La try
, except
, pass
linee può essere gestita in una singola linea con il contesto sopprimere gestore, disponibile in Python 3.4 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
Quindi, quando vuoi fare pass
alcune eccezioni, usa suppress
.