¿Cómo atrapo varias excepciones en una línea (excepto el bloque)
Hacer esto:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Los paréntesis son obligatorios debido a una sintaxis anterior que utilizaba las comas para asignar el objeto de error a un nombre. La as
palabra clave se usa para la asignación. Puede usar cualquier nombre para el objeto de error, prefiero error
personalmente.
Mejores prácticas
Para hacer esto de una manera actual y compatible con Python, debe separar las Excepciones con comas y envolverlas con paréntesis para diferenciar de la sintaxis anterior que asignó la instancia de excepción a un nombre de variable siguiendo el Tipo de excepción que se capturará con un coma.
Aquí hay un ejemplo de uso simple:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Solo especifico estas excepciones para evitar esconder errores, que si encuentro espero el seguimiento completo de la pila.
Esto se documenta aquí: https://docs.python.org/tutorial/errors.html
Puede asignar la excepción a una variable, ( e
es común, pero puede preferir una variable más detallada si tiene un manejo de excepciones prolongado o su IDE solo resalta selecciones más grandes que eso, como lo hace el mío). La instancia tiene un atributo args. Aquí hay un ejemplo:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Tenga en cuenta que en Python 3, el err
objeto queda fuera de alcance cuando except
se concluye el bloque.
Obsoleto
Es posible que vea un código que asigna el error con una coma. Este uso, el único formulario disponible en Python 2.5 y versiones anteriores, está en desuso, y si desea que su código sea compatible con Python 3, debe actualizar la sintaxis para usar el nuevo formulario:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Si ve la asignación de nombre de coma en su base de código, y está usando Python 2.5 o superior, cambie a la nueva forma de hacerlo para que su código siga siendo compatible cuando actualice.
El suppress
administrador de contexto
La respuesta aceptada es realmente 4 líneas de código, mínimo:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
El try
, except
, pass
líneas pueden ser manejados en una sola línea con el gestor de contexto suprimir, disponible en Python 3.4 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
Entonces, cuando desee pass
ciertas excepciones, use suppress
.