यदि आप अंतर्निहित त्रुटियों के लिए प्रलेखन को देखते हैं , तो आप देखेंगे कि अधिकांश 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विशेषता के साथ आती है या नहीं अलग है।