İstisna nesnesinin ait olduğu sınıfın adını alın:
e.__class__.__name__
ve print_exc () fonksiyonunun kullanılması, herhangi bir hata mesajı için gerekli bilgi olan yığın izlemesini de yazdıracaktır.
Bunun gibi:
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!"
Bu şekilde çıktı alacaksınız:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
Ve baskı ve analizden sonra, kod istisnayı işlememeye ve sadece yürütmeye karar verebilir 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"
Çıktı:
special case of CustomException not interfering
Ve tercüman istisna yazdırır:
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
raise
Orijinal istisna sonra çağrı yığını daha ilerlemeye devam ediyor. ( Olası tuzağa dikkat edin ) Yeni bir istisna getirirseniz, yeni (daha kısa) yığın izini taşır.
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"
Çıktı:
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
Geri izlemenin, orijinal istisnanın kaynağı olan calculate()
satırdan işlevi nasıl içermediğine dikkat edin .9
e
except:
(çıplak olmadanraise
), hariç belki tercihen değil o programın başına bir kez, ve.