यदि आप अंतर्निहित त्रुटियों के लिए प्रलेखन को देखते हैं , तो आप देखेंगे कि अधिकांश Exception
वर्ग एक message
विशेषता के रूप में अपना पहला तर्क देते हैं। हालांकि ये सभी नहीं करते हैं।
विशेष रूप से, EnvironmentError
(उपवर्गों के साथ IOError
और OSError
) के एक पहला तर्क है errno
, की दूसरी strerror
। वहाँ कोई नहीं है message
... strerror
क्या सामान्य रूप से होगा एक मोटे तौर पर अनुरूप है message
।
अधिक आम तौर पर, उप-वर्ग Exception
वे जो चाहें कर सकते हैं। उनके पास message
विशेषता हो भी सकती है और नहीं भी । भविष्य में निर्मित Exception
एस में एक message
विशेषता नहीं हो सकती है । Exception
तृतीय-पक्ष लाइब्रेरी या उपयोगकर्ता कोड से आयात किए गए किसी भी उपवर्ग में message
विशेषता नहीं हो सकती है ।
मुझे लगता है कि इसे संभालने का उचित तरीका उन विशिष्ट Exception
उपवर्गों की पहचान करना है जिन्हें आप पकड़ना चाहते हैं, और फिर उन सब के बजाय केवल एक को पकड़ते हैं, फिर उन 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
विशेषता के साथ आती है या नहीं अलग है।