Alors que la réponse de James est presque toujours ce que vous voulez vraiment, ce n'est pas tout à fait ce que l'OP a demandé:
est-il un moyen d'exclure toute exception arbitraire et d'imprimer le message d'exception dans le bloc except?
Exception
ne fait pas poignée toutes exceptions, seulement toutes les exceptions que vous voulez habituellement attraper. En particulier, dans les versions 2.5 et ultérieures:
Toutes les exceptions intégrées qui ne sont pas liées au système sont dérivées de cette classe. Toutes les exceptions définies par l'utilisateur doivent également être dérivées de cette classe.
Cela laisse quelques petites choses:
- intégrés exceptions-sortie du système, comme un
KeyboardInterrupt
de l'utilisateur frapper ^C
(2.5 et plus tard seulement)
- exceptions définies par l'utilisateur don « t suivre que « devrait »
Très de temps en temps, vous voulez gérer les choses comme KeyboardInterrupt
, dans ce cas, vous utilisez BaseException
au lieu de Exception
.(Voir Exception hierarchy pour une liste dont les exceptions sont et ne sont pas Exception
sous-classes.) Donc:
try:
# stuff
except BaseException as e:
print e
Et (habituellement temporairement pendant le débogage) parfois vous voulez vraiment gérer absolument tout. Dans 2.7, cela inclut les exceptions définies comme des classes de style ancien; dans 2.5 et plus tôt, il inclut également des chaînes. La seule façon de gérer toutes ces possibilités est d'utiliser un nu except
puis utilisez sys.exc_info
(et, le cas échéant, tout ce que vous re raise
ne voulais pas gérer):
try:
# stuff
except:
type, value, traceback = sys.exc_info()
print value
Comme une note de côté, je J'utilise la nouvelle syntaxe except
(except Exception as e
) ci-dessus. Cela fonctionne dans 2.6 et plus tard, y compris 3.x. La syntaxe de style ancien (except Exception, e
) est obsolète dans 2.6 et cesse de fonctionner dans la version 3.0, mais si vous voulez travailler avec des versions 2.x plus anciennes, vous devez l'utiliser.
Notez que la syntaxe 'Exception, e' est obsolète à partir de la version 2.6 et cesse de fonctionner à partir de la version 3.0. Si vous avez du code qui doit fonctionner à la fois avec 2.x et 3.x, utilisez 'Exception as e' à la place. (Cependant, si vous avez besoin de travailler avec 2.5 ou plus tôt, vous devez utiliser cette syntaxe.) – abarnert