Tengo una lista de comprensión en Python en la que cada iteración puede generar una excepción.
Por ejemplo , si tengo:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Obtendré una ZeroDivisionError
excepción en el tercer elemento.
¿Cómo puedo manejar esta excepción y continuar la ejecución de la comprensión de la lista?
La única forma en que puedo pensar es usar una función auxiliar:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Pero esto me parece un poco engorroso.
¿Existe una mejor manera de hacer esto en Python?
Nota: Este es un ejemplo simple (ver " por ejemplo " arriba) que ideé porque mi ejemplo real requiere algo de contexto. No me interesa evitar la división por cero errores, sino manejar las excepciones en una lista de comprensión.
ndarray
con la configuración adecuada en np.seterr
. Eso daría como resultado 1/0 = nan
. Pero me doy cuenta de que eso no se generaliza a otras situaciones en las que surge esta necesidad.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Pero todavía está en modo borrador. Mi instinto es que no será aceptado. En mi opinión, las expresiones pueden volverse demasiado confusas (verificar múltiples excepciones, tener combinaciones más complejas (múltiples operadores lógicos, comprensiones complejas, etc.)