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, j'attrape plusieurs exceptions (ou toutes) et je souhaite imprimer le nom de l'exception dans un message d'erreur.
python
exception
exception-handling
Rob Bednark
la source
la source
except NameError:
) pour commencer?traceback
module de la bibliothèque standard , qui a des fonctions qui font un bon formatage des exceptions et des retraits.except
instruction, mais l'entrée de journal est très similaire dans chaque cas.Réponses:
Voici quelques méthodes différentes pour obtenir le nom de la classe de l'exception:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
par exemple,
la source
Cela fonctionne, mais il semble qu'il doit y avoir un moyen plus simple et plus direct?
la source
except Exception as exception
par le type d'exception que vous souhaitez attraper, c'est-à-direexcept NameError as exception
.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_infola source
Si vous voulez le nom de classe complet (par exemple
sqlalchemy.exc.IntegrityError
au lieu de justeIntegrityError
), vous pouvez utiliser la fonction ci-dessous, que j'ai tirée de la réponse impressionnante de MB à une autre question (j'ai simplement renommé certaines variables selon mes goûts):Exemple:
la source
Les autres réponses ici sont excellentes à des fins d'exploration, mais si l'objectif principal est de consigner l'exception (y compris le nom de l'exception), envisagez peut-être d'utiliser logging.exception au lieu de print?
la source