পাইথনে ইউজার-ডিফাইনড বা কাস্টম এক্সসেপশন তৈরি করতে হলে একটি নতুন এক্সসেপশন ক্লাস তৈরি করতে হয়। আইডিয়া হলো কাস্টম এক্সসেপশন ক্লাসকে Exception ক্লাস থেকে ডেরাইভ করা। অধিকাংশ বিল্ট-ইন এক্সসেপশন একই আইডিয়া ব্যবহার করে তাদের এক্সসেপশন এনফোর্স করে।
দেওয়া কোডে, আপনি একটি ইউজার-ডিফাইনড এক্সসেপশন ক্লাস তৈরি করেছেন, "CustomException"। এটি Exception ক্লাসকে প্যারেন্ট হিসেবে ব্যবহার করছে। তাই নতুন ইউজার-ডিফাইনড এক্সসেপশন ক্লাস অন্য এক্সসেপশন ক্লাসের মতো এক্সসেপশন রেইজ করবে — "raise" স্টেটমেন্ট কল করে একটি অপশনাল এরর মেসেজ দিয়ে।
একটি উদাহরণ নিই।
এই উদাহরণে, আমরা দেখাব কীভাবে ইউজার-ডিফাইনড এক্সসেপশন রেইজ করতে হয় এবং প্রোগ্রামে এরর ক্যাচ করতে হয়। এছাড়া, স্যাম্পল কোডে ইউজার থেকে বারবার অ্যালফাবেট ইনপুট নেওয়া হচ্ছে যতক্ষণ না সে সঠিক অ্যালফাবেট দেয়।
সাহায্যের জন্য, প্রোগ্রাম ইউজারকে হিন্ট দেয় যাতে সে সঠিক অ্যালফাবেট বের করতে পারে।
# Python user-defined exceptions
class CustomException(Exception):
"""Base class for other exceptions"""
pass
class PrecedingLetterError(CustomException):
"""Raised when the entered alphabet is smaller than the actual one"""
pass
class SucceedingLetterError(CustomException):
"""Raised when the entered alphabet is larger than the actual one"""
pass
# we need to guess this alphabet till we get it right
alphabet = 'k'
while True:
try:
foo = input("Enter an alphabet: ")
if foo < alphabet:
raise PrecedingLetterError
elif foo > alphabet:
raise SucceedingLetterError
break
except PrecedingLetterError:
print("The entered alphabet is preceding one, try again!")
print()
except SucceedingLetterError:
print("The entered alphabet is succeeding one, try again!")
print()
print("Congratulations! You guessed it correctly.")