যদি আপনি অন্তর্নির্মিত ত্রুটিগুলির জন্য ডকুমেন্টেশনটি দেখেন তবে আপনি দেখতে পাবেন যে বেশিরভাগ 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বৈশিষ্ট্য নিয়ে আসে বা না পৃথক।