Custom Exception তৈরি এবং পরিচালনা করা প্রোগ্রামিং ভাষার শক্তিশালী একটি ধারণা। এটি প্রোগ্রামের মধ্যে এমন পরিস্থিতি সৃষ্টি করতে সহায়ক যা পূর্বনির্ধারিত exception হ্যান্ডলিংয়ের বাইরে থাকে। অর্থাৎ, আপনি যখন নিজস্ব exception তৈরি করতে চান, তখন আপনি এমন একটি ত্রুটি বা ব্যতিক্রম সৃষ্টি করতে পারেন যা নির্দিষ্ট পরিস্থিতিতে ঘটে এবং তার জন্য আপনি নিজেই কাস্টম বার্তা বা হ্যান্ডলিংয়ের পদ্ধতি নির্ধারণ করতে পারবেন।
Custom Exception তৈরি এবং পরিচালনার ধাপ
এখানে Python ভাষায় Custom Exception তৈরি করার উদাহরণ দেওয়া হলো:
1. Custom Exception Class তৈরি করা
Custom Exception তৈরি করতে, সাধারণত Exception ক্লাস বা তার কোনো উপক্লাস (subclass) ব্যবহার করা হয়। আপনি নিজের exception এর নাম এবং কোনো অতিরিক্ত তথ্য নির্ধারণ করতে পারেন।
Custom Exception Class তৈরি করার উদাহরণ:
class InvalidAgeException(Exception):
def __init__(self, message="অবৈধ বয়স।"):
self.message = message
super().__init__(self.message)
class InsufficientBalanceException(Exception):
def __init__(self, message="অপর্যাপ্ত ব্যালেন্স।"):
self.message = message
super().__init__(self.message)এখানে, আমরা দুটি কাস্টম exception তৈরি করেছি:
InvalidAgeException: যা যখন বয়সের মান অবৈধ হয় তখন ব্যবহার হবে।InsufficientBalanceException: যখন ব্যালেন্স অপর্যাপ্ত হবে তখন ব্যবহার হবে।
__init__ মেথডে আমরা custom error message পাস করতে পারি এবং super().__init__(self.message) এর মাধ্যমে প্যারেন্ট Exception ক্লাসের কনস্ট্রাক্টর কল করি।
2. Custom Exception হ্যান্ডলিং করা
Custom exception তৈরি করার পর, আপনি যেভাবে সাধারণ exception হ্যান্ডলিং করেন ঠিক সেভাবে এই exception গুলো হ্যান্ডল করতে পারবেন। try এবং except ব্লক ব্যবহার করে custom exception ক্যাচ করা যায়।
Custom Exception হ্যান্ডলিং করার উদাহরণ:
def check_age(age):
if age < 0 or age > 120:
raise InvalidAgeException("বয়স অবশ্যই 0 থেকে 120 বছরের মধ্যে হতে হবে।")
return age
def check_balance(balance, amount):
if balance < amount:
raise InsufficientBalanceException(f"আপনার ব্যালেন্স {balance} এর চেয়ে {amount} বেশি।")
return balance - amount
try:
age = int(input("আপনার বয়স দিন: "))
check_age(age) # বয়স যাচাই
balance = 1000
amount_to_withdraw = int(input("কত টাকা তোলার চেষ্টা করছেন? "))
check_balance(balance, amount_to_withdraw) # ব্যালেন্স যাচাই
except InvalidAgeException as e:
print(f"ত্রুটি: {e}")
except InsufficientBalanceException as e:
print(f"ত্রুটি: {e}")
except ValueError:
print("অনুগ্রহ করে একটি বৈধ সংখ্যা প্রদান করুন।")
else:
print("অপারেশন সফল হয়েছে!")
finally:
print("এই ব্লকটি সবসময় রান করবে।")3. ব্যাখ্যা:
check_ageফাংশন: এখানে, বয়স যদি 0 থেকে 120 এর বাইরে থাকে তবেInvalidAgeExceptionসৃষ্টির জন্যraiseকিওয়ার্ড ব্যবহার করা হয়েছে।check_balanceফাংশন: এখানে, যদি ব্যালেন্সের পরিমাণ তুলনামূলকভাবে কম থাকে, তাহলেInsufficientBalanceExceptionraise করা হবে।try-exceptব্লক: এখানে আমরা custom exception গুলো হ্যান্ডল করি। যখন কোনো exception ঘটে, তা নির্দিষ্ট custom exception হ্যান্ডলার দ্বারা পরিচালিত হবে।
4. Multiple Custom Exception Catch করা
একই try ব্লকে একাধিক custom exception ক্যাচ করা সম্ভব। নিচে দেখানো হলো কিভাবে একাধিক exception একই সময়ে ক্যাচ করা যায়:
try:
# কোড যা exception ঘটাতে পারে
check_age(150) # অবৈধ বয়স
check_balance(500, 1000) # অপর্যাপ্ত ব্যালেন্স
except (InvalidAgeException, InsufficientBalanceException) as e:
print(f"ত্রুটি: {e}")5. Custom Exception-এ অতিরিক্ত তথ্য দেওয়া
আপনি আপনার কাস্টম exception ক্লাসে অতিরিক্ত ডেটা পাস করতে পারেন। যেমন, ফাইলের নাম, লাইনের নাম বা কোনো নির্দিষ্ট ডেটার উপর ভিত্তি করে custom exception তৈরি করা যেতে পারে।
উদাহরণ:
class InvalidAgeException(Exception):
def __init__(self, message="অবৈধ বয়স।", age=None):
self.message = message
self.age = age
super().__init__(self.message)
def __str__(self):
return f"{self.message} (Age entered: {self.age})"এখানে, age এর মানটিও exception এর সাথে পাঠানো হচ্ছে এবং custom __str__ method দিয়ে exception এর একটি কাস্টম বার্তা তৈরি করা হয়েছে।
6. রিয়ার লাইফ উদাহরণ
এটি একটি ব্যাংক অ্যাপ্লিকেশনের কাস্টম exception হিসেবে ব্যবহার হতে পারে যেখানে invalid ট্রান্সেকশন বা অপ্রত্যাশিত অ্যাকাউন্টের ব্যালেন্স নিয়ে exceptions ঘটবে।
class TransactionFailedException(Exception):
def __init__(self, message="ট্রান্সেকশন ব্যর্থ হয়েছে", transaction_id=None):
self.message = message
self.transaction_id = transaction_id
super().__init__(self.message)
def __str__(self):
return f"{self.message} (Transaction ID: {self.transaction_id})"
# একটি ফাংশন যেখানে transaction error হতে পারে
def process_transaction(transaction_id, balance, amount):
if balance < amount:
raise TransactionFailedException(message="অপর্যাপ্ত ব্যালেন্স", transaction_id=transaction_id)
# ফাংশন কল
try:
process_transaction(12345, 100, 150)
except TransactionFailedException as e:
print(f"ত্রুটি: {e}")সারাংশ
- Custom Exception তৈরি করার মাধ্যমে আপনি প্রোগ্রামের জন্য নিজস্ব exception তৈরী করতে পারেন, যা নির্দিষ্ট ত্রুটির জন্য বিশেষ বার্তা বা কার্যকলাপ প্রদর্শন করবে।
- আপনি
raiseকিওয়ার্ড ব্যবহার করে custom exception তৈরি এবং উঠাতে পারেন এবংtry-exceptব্লক দিয়ে সেগুলিকে পরিচালনা করতে পারেন। - Custom Exception Class-এ অতিরিক্ত তথ্য বা বৈশিষ্ট্য যুক্ত করা যেতে পারে যা exception ট্র্যাকিং ও ডিবাগিংকে আরও সহজ করে তোলে।
Custom exception প্রোগ্রামারদের জন্য একটি শক্তিশালী টুল, যা বিভিন্ন ধরনের অস্বাভাবিক পরিস্থিতি বা ত্রুটির ক্ষেত্রে কার্যকরীভাবে ব্যবহৃত হতে পারে।
Read more