web-dev-qa-db-fra.com

Comment obtenir le nom d'exception qui a été attrapé en Python?

Comment puis-je obtenir le nom d'une exception qui a été déclenchée en Python?

par exemple.,

try:
    foo = bar
except Exception as exception:
    name_of_exception = ???
    assert name_of_exception == 'NameError'
    print "Failed with exception [%s]" % name_of_exception

Par exemple, je intercepte plusieurs exceptions (ou toutes) et souhaite imprimer le nom de l'exception dans un message d'erreur.

97
Rob Bednark

Voici deux manières différentes d'obtenir le nom de l'exception:

  1. type(exception).__name__
  2. exception.__class__.__name__

par exemple.,

try:
    foo = bar
except Exception as exception:
    assert type(exception).__== 'NameError'
    assert exception.__class__.__== 'NameError'
175
user1234

Cela fonctionne, mais il semble qu'il doit y avoir un moyen plus facile et plus direct?

try:
    foo = bar
except Exception as exception:
    assert repr(exception) == '''NameError("name 'bar' is not defined",)'''
    name = repr(exception).split('(')[0]
    assert name == 'NameError'
4
Rob Bednark

Vous pouvez également utiliser sys.exc_info(). exc_info() renvoie 3 valeurs: type, valeur, traceback. Sur la documentation: https://docs.python.org/3/library/sys.html#sys.exc_info

import sys

try:
    foo = bar
except Exception:
    exc_type, value, traceback = sys.exc_info()
    assert exc_type.__== 'NameError'
    print "Failed with exception [%s]" % name_of_exception
1
moshfiqur