Rufen Sie den Namen der Klasse ab, zu der das Ausnahmeobjekt gehört:
e.__class__.__name__
Bei Verwendung der Funktion print_exc () wird auch die Stapelverfolgung gedruckt, die für jede Fehlermeldung von wesentlicher Bedeutung ist.
So was:
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!"
Sie erhalten folgende Ausgabe:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
Und nach dem Drucken und Analysieren kann der Code entscheiden, keine Ausnahme zu behandeln und nur Folgendes auszuführen 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"
Ausgabe:
special case of CustomException not interfering
Und Dolmetscher druckt Ausnahme:
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
Nach der raise
ursprünglichen Ausnahme wird die Weitergabe des Aufrufstapels fortgesetzt. ( Vorsicht vor möglichen Gefahren ) Wenn Sie eine neue Ausnahme auslösen, wird eine neue (kürzere) Stapelspur erstellt.
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"
Ausgabe:
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
Beachten Sie, dass Traceback keine calculate()
Funktion von Zeile enthält, 9
die der Ursprung der ursprünglichen Ausnahme ist e
.
except:
(ohne Bareraise
), außer vielleicht einmal pro Programm und vorzugsweise nicht dann.