আমি একটি মডিউল লিখছি এবং এটি উত্থাপন করতে পারে এমন ব্যতিক্রমগুলির জন্য একীভূত ব্যতিক্রম শ্রেণিবিন্যাস রাখতে চাই (উদাহরণস্বরূপ মডিউলটির নির্দিষ্ট ব্যতিক্রমগুলির FooError
জন্য একটি বিমূর্ত শ্রেণীর উত্তরাধিকার foo
)। এটি মডিউলটির ব্যবহারকারীদের সেই বিশেষ ব্যতিক্রমগুলি ধরতে এবং প্রয়োজনে এগুলি স্বতন্ত্রভাবে পরিচালনা করতে সহায়তা করে। তবে মডিউল থেকে উত্থাপিত ব্যতিক্রমগুলি অনেকগুলি অন্য কিছু ব্যতিক্রমের কারণে উত্থাপিত হয়; উদাহরণস্বরূপ কোনও ফাইলে ওএসআরারের কারণে কোনও কাজে ব্যর্থ।
আমার যা দরকার তা ব্যতিক্রমটিকে "মোড়ক" করা যেমন এটির একটি ভিন্ন ধরণের এবং বার্তা রয়েছে , যাতে ব্যতিক্রমী যে কোনও বিষয় ধরা পড়ে তথ্য প্রচারের ক্রমবর্ধমান অবধি পাওয়া যায়। তবে আমি বিদ্যমান ধরণ, বার্তা এবং স্ট্যাক ট্রেস হারাতে চাই না; যে কেউ সমস্যার ডিবাগ করার চেষ্টা করছেন তার জন্য এটি সমস্ত দরকারী তথ্য। একটি শীর্ষ-স্তরের ব্যতিক্রম হ্যান্ডলারটি ভাল নয়, যেহেতু আমি প্রচার ব্যতাকে আরও এগিয়ে নিয়ে যাওয়ার আগে ব্যতিক্রমটি সাজানোর চেষ্টা করছি এবং শীর্ষ স্তরের হ্যান্ডলারটি খুব দেরিতে late
আমার মডিউলের foo
নির্দিষ্ট ব্যতিক্রমগুলি বিদ্যমান প্রকারের (যেমন class FooPermissionError(OSError, FooError)
) থেকে নির্দিষ্ট করে এটিকে আংশিকভাবে সমাধান করা হয়েছে , তবে এটি বিদ্যমান ব্যতিক্রম উদাহরণটি কোনও নতুন ধরণে लपेटতে বা বার্তা পরিবর্তন করতে কোনও সহজ করে না।
পাইথনের পিইপি 3134 "এক্সপেশন চেইনিং অ্যান্ড এমবেডেড ট্রেসব্যাকস" পাইথন 3.0 এ "চেইনিং" ব্যতিক্রম আইটেমের জন্য গৃহীত একটি পরিবর্তন নিয়ে আলোচনা করে, এটি প্রমাণ করতে যে একটি বিদ্যমান ব্যতিক্রম পরিচালনা করার সময় একটি নতুন ব্যতিক্রম উত্থাপিত হয়েছিল।
আমি যা করার চেষ্টা করছি তা সম্পর্কিত: আমার এটি পাইথন সংস্করণের আগের সংস্করণেও কাজ করা প্রয়োজন এবং আমার এটি শৃঙ্খলার জন্য নয়, কেবল পলিমারফিজমের জন্য প্রয়োজন। এটি করার সঠিক উপায় কী?
except Exception as e
-> raise type(e), type(e)(e.message + custom_message), sys.exc_info()[2]
-> এই সমাধানটি অন্য একটি প্রশ্ন থেকে । এটি সুন্দর নয় তবে কার্যকরী।