web-dev-qa-db-fra.com

Python: Comment ignorer une exception et continuer?

J'ai un essai ... sauf bloquer dans mon code et quand une exception est levée. Je veux vraiment continuer avec le code car dans ce cas, tout est encore capable de fonctionner correctement. Le problème est que si vous laissez le bloc except: block vide ou avec un #do rien, cela vous donnera une erreur de syntaxe. Je ne peux pas utiliser continue car ce n'est pas dans une boucle. Existe-t-il un mot-clé que je peux utiliser qui indique au code de continuer?

336
The.Anti.9
525
Andy Hume

Réponse générique

Le "nop" standard dans Python est l'instruction pass:

try:
    do_something()
except Exception:
    pass

En utilisant except Exception au lieu d'un except dépourvu, éviter de capturer des exceptions telles que SystemExit, KeyboardInterrupt etc.

Python 2

Étant donné que la dernière exception levée a été mémorisée dans Python 2, certains objets impliqués dans la déclaration d'exception sont conservés en vie indéfiniment (en fait, jusqu'à la prochaine exception). Si cela est important pour vous et (généralement) que vous n'avez pas besoin de vous souvenir de la dernière exception levée, vous pouvez effectuer les opérations suivantes au lieu de pass:

try:
    do_something()
except Exception:
    sys.exc_clear()

Ceci efface la dernière exception levée.

Python 3

Dans Python 3, la variable qui contient l'instance de l'exception obtient supprimée à la sortie du bloc except. Même si la variable contenait une valeur précédemment, après avoir entré et quitté le bloc except, il redevient non défini.

244
tzot

Il y a une nouvelle façon de faire ça en Python 3.4:

from contextlib import suppress

with suppress(Exception):
  # your code

Voici le commit qui l'a ajouté: http://hg.python.org/cpython/rev/406b47c6448

Et voici l'auteur, Raymond Hettinger, qui parle de cela et de toutes sortes d'autres Python hotness (passage pertinent à 43h30): http://www.youtube.com/watch?v = OSGv2VnC0go

Si vous souhaitez émuler le mot-clé nu except et ignorer des éléments tels que KeyboardInterrupt, bien que ce ne soit généralement pas le cas, vous pouvez utiliser with suppress(BaseException).

Edit: On dirait que ignored a été renommé suppress avant la version 3.4.

163
Jack O'Connor

Essaye ça:

try:
    blah()
except:
    pass
15
ryeguy