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

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)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.