รับชื่อของคลาสที่วัตถุยกเว้นเป็นของ:
e.__class__.__name__
และการใช้ฟังก์ชัน print_exc () จะพิมพ์การติดตามสแต็กซึ่งเป็นข้อมูลที่จำเป็นสำหรับข้อความแสดงข้อผิดพลาด
แบบนี้:
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!"
คุณจะได้ผลลัพธ์ดังนี้:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
และหลังจากพิมพ์และวิเคราะห์รหัสสามารถตัดสินใจที่จะไม่จัดการกับข้อยกเว้นและเพียงดำเนินการ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"
เอาท์พุท:
special case of CustomException not interfering
และล่ามพิมพ์ข้อยกเว้น:
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
ข้อยกเว้นเดิมยังคงเผยแพร่ต่อไปกองซ้อนการโทร ( ระวังอันตรายที่อาจเกิดขึ้นได้ ) หากคุณเพิ่มข้อยกเว้นใหม่จะทำให้เกิดการติดตามสแต็กใหม่ (สั้นลง)
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"
เอาท์พุท:
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
แจ้งให้ทราบว่า traceback ไม่รวมถึงcalculate()
ฟังก์ชั่นจากบรรทัดซึ่งเป็นที่มาของข้อยกเว้นเดิม9
e
except:
(โดยไม่ใช้ bareraise
) ยกเว้นอาจจะใช้เพียงครั้งเดียวต่อโปรแกรมและไม่ควรใช้ตอนนั้น