প্রতি মাসে আপনার সঙ্গী তাঁর প্রিয় বন্ধুর সাথে দেখা করেন। দুজনেই খুব ব্যস্ত থাকেন, তাই উপযুক্ত একটি তারিখ খুঁজে পাওয়া বেশ কঠিন হয়ে পড়ে! আপনি নিজেও ব্যস্ত, তাই সম্ভাব্য কোন তারিখে দেখা করা যাবে তা আপনার সঙ্গী সবসময় আপনার সাথে মিলিয়ে নেন:
এই মাসের কলটিতে আপনার সঙ্গী আপনাকে এই প্রশ্নটি করলেন:
বিভ্রান্ত হয়ে আপনি জিজ্ঞেস করলেন, "টিন্থ" ডে বলতে আসলে কী বোঝায়। আপনার সঙ্গী ব্যাখ্যা করলেন যে টিন্থ ডে, অর্থাৎ তাঁর নিজের বানানো একটি ধারণা, বলতে মাসের সেই তারিখগুলোকে বোঝায় যেগুলো '-teenth' দিয়ে শেষ হয়:
যেহেতু সপ্তাহে সাতটি বারও আছে, তাই নিশ্চিতভাবেই প্রতি মাসে সপ্তাহের প্রতিটি বারের জন্য ঠিক একটি টিন্থ ডে থাকে।
এখন যেহেতু টিন্থ ডে-র ধারণাটি আপনি বুঝে গেছেন, আপনি নিজের ক্যালেন্ডার দেখে নিলেন। টিন্থ বৃহস্পতিবারে আপনার কোনো পরিকল্পনা নেই, তাই খুশি মনে আপনি সঙ্গীর সাথে তারিখটি নিশ্চিত করে নিলেন।
আপনার কাজ হলো মাস, বছর, সপ্তাহের বার ও সপ্তাহ দেওয়া থাকলে একটি মিটআপের সঠিক তারিখ খুঁজে বের করা।
বিবেচনার জন্য সপ্তাহের ছয়টি মান আছে: first, second, third, fourth, last, teenth।
উদাহরণস্বরূপ, আপনাকে ২০১৮ সালের জানুয়ারি মাসের প্রথম সোমবারের মিটআপের তারিখ খুঁজতে বলা হতে পারে (১ জানুয়ারি, ২০১৮)।
একইভাবে, আপনাকে খুঁজতে বলা হতে পারে:
টিনথ সপ্তাহ বলতে একটি মাসের সেই সাত দিনকে বোঝায় যেগুলো '-teenth' দিয়ে শেষ হয় (13th, 14th, 15th, 16th, 17th, 18th এবং 19th)।
১৯৫৩ সালের আগস্ট মাসের টিনথ শনিবার খুঁজতে বলা হলে, আমরা সেই মাসের ক্যালেন্ডারটি দেখি:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
এ থেকে দেখা যায়, টিনথ শনিবারটি হলো ১৫ আগস্ট, ১৯৫৩।
মাসের পঞ্চম বারের জন্য, যদি সেটি থেকে থাকে, আমরা একটি অতিরিক্ত ডেসক্রিপ্টর (fifth) যোগ করেছি।
কোনো মাসে যদি পঞ্চম বার না থাকে, তবে আপনার একটি এক্সেপশন রেইজ করা উচিত।
কখনও কখনও আপনার কোডে এক্সেপশন কাস্টমাইজ এবং raise করা, দুটোই প্রয়োজন হয়ে পড়ে। এটি করলে, এররের উৎস কী তা বোঝাতে আপনার সর্বদা একটি অর্থবহ এরর বার্তা যুক্ত করা উচিত। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং ডিবাগ করতে যথেষ্ট সাহায্য করে।
নতুন এক্সেপশন ক্লাসের মাধ্যমে কাস্টম এক্সেপশন তৈরি করা যায় (আরও বিস্তারিত জানতে classes দেখুন), যেগুলো সাধারণত Exception ক্লাসের সাবক্লাস হয়।
যেসব পরিস্থিতিতে আপনি জানেন যে এররের উৎস একটি নির্দিষ্ট এক্সেপশন টাইপেরই একটি রূপ হবে, সেখানে আপনি Exception ক্লাসের অধীনস্থ built in error typesগুলোর একটি থেকে ইনহেরিট করা বেছে নিতে পারেন। এররটি রেইজ করার সময়ও আপনার একটি অর্থবহ বার্তা যুক্ত করা উচিত।
এই নির্দিষ্ট অনুশীলনীতে চাওয়া হয়েছে যে আপনি একটি কাস্টম এক্সেপশন তৈরি করুন, যা আপনার meetup() ফাংশনকে বার-এর নাম ও সংখ্যার অবৈধ কোনো সমন্বয় দেওয়া হলে রেইজ/"থ্রো" করা হবে। যথাযথ এক্সেপশন কাস্টমাইজ করলে, সেগুলো raise করলে এবং যথাযথ এরর বার্তা যুক্ত করলে তবেই টেস্টগুলো পাস করবে।
কোনো built-in exception কাস্টমাইজ করতে, সেই এক্সেপশন থেকে ইনহেরিট করে একটি class তৈরি করুন। বার্তাসহ কাস্টম এক্সেপশনটি রেইজ করার সময়, বার্তাটি exception টাইপের একটি আর্গুমেন্ট হিসেবে লিখুন:
# subclassing the built-in ValueError to create MeetupDayException
class MeetupDayException(ValueError):
"""Exception raised when the Meetup weekday and count do not result in a valid date.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a MeetupDayException
raise MeetupDayException("That day does not exist.")
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।