J'ai une compréhension de liste en Python dans laquelle chaque itération peut lancer une exception.Comment puis-je gérer les exceptions dans une compréhension de liste en Python?
Par exemple, si j'ai:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Je vais chercher une exception ZeroDivisionError
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 que 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 semble un peu lourd pour moi.
Y a-t-il une meilleure façon de le faire en Python?
Note: Ceci est un exemple simple (voir « par exemple » ci-dessus) que je parvins parce que mon exemple réel nécessite un certain contexte. Je ne suis pas intéressé à éviter la division par zéro erreurs mais à gérer les exceptions dans une compréhension de liste.
Il existe un [PEP 463] (https://www.python.org/dev/peps/pep-0463/) pour ajouter une expression pour gérer les exceptions. Dans votre exemple ce serait '[1/egg sauf ZeroDivisionError: None pour egg in (1,3,0,3,2)]'. Mais c'est toujours en mode brouillon. Mon intuition est que ça ne va pas être accepté. – cfi
Notez que pour cet exemple * spécifique *, vous pouvez utiliser un 'ndarray' numpy avec les paramètres appropriés dans 'np. seterr'. Cela donnerait '1/0 = nan', mais je réalise que cela ne généralisera pas aux autres situations où ce besoin se présente – gerrit