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