Obtenez le nom de la classe à laquelle appartient l'objet d'exception:
e.__class__.__name__
et l'utilisation de la fonction print_exc () imprimera également la trace de la pile qui est une information essentielle pour tout message d'erreur.
Comme ça:
from traceback import print_exc
class CustomException(Exception): pass
try:
raise CustomException("hi")
except Exception, e:
print 'type is:', e.__class__.__name__
print_exc()
# print "exception happened!"
Vous obtiendrez une sortie comme celle-ci:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
Et après impression et analyse, le code peut décider de ne pas gérer d'exception et d'exécuter simplement raise
:
from traceback import print_exc
class CustomException(Exception): pass
def calculate():
raise CustomException("hi")
try:
calculate()
except Exception, e:
if e.__class__ == CustomException:
print 'special case of', e.__class__.__name__, 'not interfering'
raise
print "handling exception"
Production:
special case of CustomException not interfering
Et l'interprète imprime l'exception:
Traceback (most recent call last):
File "test.py", line 9, in <module>
calculate()
File "test.py", line 6, in calculate
raise CustomException("hi")
__main__.CustomException: hi
Après que raise
l'exception d'origine continue de se propager plus haut dans la pile des appels. ( Méfiez-vous des pièges possibles ) Si vous soulevez une nouvelle exception, il se soucie d'une nouvelle trace de pile (plus courte).
from traceback import print_exc
class CustomException(Exception): pass
def calculate():
raise CustomException("hi")
try:
calculate()
except Exception, e:
if e.__class__ == CustomException:
print 'special case of', e.__class__.__name__, 'not interfering'
#raise CustomException(e.message)
raise e
print "handling exception"
Production:
special case of CustomException not interfering
Traceback (most recent call last):
File "test.py", line 13, in <module>
raise CustomException(e.message)
__main__.CustomException: hi
Remarquez comment traceback n'inclut pas la calculate()
fonction de la ligne 9
qui est à l'origine de l'exception d'origine e
.
except:
(sans nuraise
), sauf peut-être une fois par programme, et de préférence pas à ce moment-là.