หากคุณดูเอกสารสำหรับข้อผิดพลาดในตัวคุณจะเห็นว่าException
ชั้นเรียนส่วนใหญ่กำหนดอาร์กิวเมนต์แรกเป็น amessage
แอตทริบิวต์ ไม่ใช่ทั้งหมดที่ทำ
ยวดEnvironmentError
(กับ subclasses IOError
และOSError
) มีอาร์กิวเมนต์แรกของสองของerrno
strerror
ไม่มีmessage
... strerror
มีความคล้ายคลึงกับสิ่งที่ปกติจะเป็นmessage
.
โดยทั่วไปคลาสย่อยException
สามารถทำอะไรก็ได้ที่ต้องการ อาจมีหรือไม่มีmessage
แอตทริบิวต์ ในอนาคตException
อาจไม่มีmessage
แอตทริบิวต์ Exception
คลาสย่อยใด ๆ ที่นำเข้าจากไลบรารีของบุคคลที่สามหรือรหัสผู้ใช้อาจไม่มีmessage
แอตทริบิวต์
ฉันคิดว่าวิธีที่เหมาะสมในการจัดการสิ่งนี้คือการระบุException
คลาสย่อยเฉพาะที่คุณต้องการจับจากนั้นจับเฉพาะคลาสเหล่านั้นแทนที่จะเป็นทุกอย่างด้วย an except Exception
จากนั้นใช้แอตทริบิวต์ใด ๆ ที่คลาสย่อยเฉพาะกำหนดตามที่คุณต้องการ
ถ้าคุณต้องมีprint
บางอย่างฉันคิดว่าการพิมพ์ที่จับได้Exception
นั้นมักจะทำในสิ่งที่คุณต้องการไม่ว่าจะมีmessage
คุณลักษณะหรือไม่
นอกจากนี้คุณยังสามารถตรวจสอบแอตทริบิวต์ข้อความได้หากต้องการเช่นนี้ แต่ฉันจะไม่แนะนำจริงๆเพราะมันดูยุ่ง:
try:
pass
except Exception as e:
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
except Foo as bar:
เหมือนกับexcept Foo, bar:
(ยกเว้นสิ่งที่ใหม่กว่าและจะยังคงทำงานใน 3.x) ไม่ว่าข้อผิดพลาดจะมาพร้อมกับmessage
แอตทริบิวต์หรือไม่ก็ตาม