Python: un intento múltiple, excepto

196

En Python, ¿es posible tener múltiples exceptdeclaraciones para una trydeclaración? Como :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc
Eva611
fuente
77
@ Eva611: No te disculpes. (1) pruébalo. (2) publique una respuesta a su pregunta.
S.Lott
66
Funciona Probado con el intérprete de Python ...
Eva611
38
@ Eva611 Creo que tu pregunta estuvo bien. Fue mucho más rápido para Google que esto en lugar de configurar un ejemplo en el intérprete de Python, por lo que me alegré de que lo preguntaras. DrTysa y otros deberían haber respondido con un rápido "sí" en lugar de regañarte.
galarant
55
La mayoría de las veces su primera suposición será errónea, o perderá sutiles matices, así que (como otros 15,000) ¡probé Google primero!
Chris
9
Intenté google y encontré esta pregunta. Por lo tanto, me alegra que alguien más lo haya preguntado en un foro tan público como SO, y me alegro de que haya otras personas vinculadas a él que el algoritmo de Google apareció como mi primer resultado.
kingledion

Respuestas:

329

Sí, es posible.

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()

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

La palabra clave "as" se usa para asignar el error a una variable para que el error pueda investigarse más a fondo más adelante en el código. También tenga en cuenta que los paréntesis para el caso de la triple excepción son necesarios en Python 3. Esta página tiene más información: Capture varias excepciones en una línea (excepto el bloque)

vartec
fuente
76
Si quieres hacer lo mismo en ambos casos, es except (SomeError, OtherError):. No responde la pregunta de OP, pero podría ayudar a algunas personas que llegan aquí a través de Google.
Mark
Si, por ejemplo, tiene que convertir varias versiones de una estructura de datos en una nueva estructura, al actualizar versiones de código, por ejemplo, puede anidar el try..excepts.
Rolf de Sajonia
55
Si desea manejar todas las excepciones, debería usarlas en except Exception:lugar de simples except:. (Normal excepto que se SystemExitKeyboardInterrupt
igualará
Quizás también quieras hacer algo eya que le das un nombre :)
HelloGoodbye