177 votes

Comment gérer les exceptions dans les listes de compréhension ?

J'ai réalisé une compréhension de liste en Python dans laquelle chaque itération peut lever une exception.

Par exemple si je l'ai fait :

eggs = (1,3,0,3,2)

[1/egg for egg in eggs]

J'obtiendrai un ZeroDivisionError exception dans le 3ème élément.

Comment puis-je gérer cette exception et poursuivre l'exécution de la compréhension de la liste ?

La seule solution à laquelle je pense est d'utiliser une fonction d'aide :

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 lourd.

Existe-t-il une meilleure façon de procéder en Python ?

Remarque : Il s'agit d'un exemple simple (voir " par exemple ") que j'ai inventé parce que mon exemple réel nécessite un certain contexte. Ce qui m'intéresse, ce n'est pas d'éviter les erreurs de division par zéro, mais de gérer les exceptions dans la compréhension d'une liste.

5voto

Slakker Points 153

Je n'ai pas vu de réponse à ce sujet. Mais cet exemple serait une façon d'empêcher qu'une exception soit levée pour des cas d'échec connus.

eggs = (1,3,0,3,2)
[1/egg if egg > 0 else None for egg in eggs]

Output: [1, 0, None, 0, 0]

0voto

Maciek D. Points 631

Vous pouvez utiliser des générateurs :

def invert(xs):
    for x in xs:
        try:
            yield x
        except:
            yield None

list(invert(eggs))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X