Uzyskaj nazwę klasy, do której należy obiekt wyjątku:
e.__class__.__name__
a użycie funkcji print_exc () spowoduje także wydrukowanie śladu stosu, który jest niezbędną informacją dla każdego komunikatu o błędzie.
Lubię to:
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!"
Otrzymasz dane wyjściowe w następujący sposób:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
Po wydrukowaniu i analizie kod może zdecydować, aby nie obsługiwać wyjątków i po prostu wykonać 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"
Wynik:
special case of CustomException not interfering
I interpreter drukuje wyjątek:
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
Po raise
oryginalnym wyjątku nadal propaguje się dalej w górę stosu wywołań. ( Uwaga na ewentualną pułapkę ) Jeśli podniesiesz nowy wyjątek, będzie to oznaczać nowy (krótszy) ślad stosu.
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"
Wynik:
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
Zauważ, że traceback nie obejmuje calculate()
funkcji z linii, 9
która jest źródłem oryginalnego wyjątku e
.
except:
(bez gołyraise
), z wyjątkiem może raz na program, a najlepiej nie wtedy.