J'ai une compréhension de liste en Python dans laquelle chaque itération peut lever une exception.
Par exemple , si j'ai:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
J'obtiendrai une ZeroDivisionError
exception dans le 3ème élément.
Comment puis-je gérer cette exception et continuer l'exécution de la compréhension de la liste?
La seule façon dont je peux penser est d'utiliser une fonction d'assistance:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Mais cela me semble un peu compliqué.
Existe-t-il une meilleure façon de faire cela en Python?
Remarque: Ceci est un exemple simple (voir " par exemple " ci-dessus) que j'ai inventé parce que mon exemple réel nécessite un certain contexte. Je ne suis pas intéressé à éviter la division par zéro erreur, mais à gérer les exceptions dans une compréhension de liste.
ndarray
avec les paramètres appropriés dans np.seterr
. Cela entraînerait 1/0 = nan
. Mais je me rends compte que cela ne se généralise pas à d'autres situations où ce besoin se fait sentir.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Mais il est toujours en mode brouillon. Mon instinct est que cela ne sera pas accepté. Les expressions Imho peuvent devenir trop compliquées (vérifier plusieurs exceptions, avoir des combinaisons plus complexes (plusieurs opérateurs logiques, des compréhensions complexes, etc.)