পাইথনে Exception Handling (ব্যতিক্রমী ত্রুটি ব্যবস্থাপনা) হলো এমন একটি মেকানিজম বা পদ্ধতি, যার মাধ্যমে কোড চলাকালীন কোনো ভুল বা এরর (Error) দেখা দিলে প্রোগ্রামকে ক্র্যাশ বা বন্ধ হতে না দিয়ে নিরাপদে সচল রাখা এবং ত্রুটিটি নিয়ন্ত্রণ করা যায়।
কোডে রানটাইম এরর (যেমন: শূন্য দিয়ে ভাগ করা বা ভুল ফাইল খোঁজা) হলে পাইথন একটি "Exception" বা ব্যতিক্রম তৈরি করে। এটি হ্যান্ডেল না করলে প্রোগ্রামটি সেখানেই থেমে যায়।
এটি কীভাবে কাজ করে?
পাইথনে মূলত ৪টি ব্লকের সমন্বয়ে Exception Handling কাজ করে: try, except, else, এবং finally।
১. try ব্লক:
যে কোডটিতে ভুল বা এরর হওয়ার সম্ভাবনা থাকে, সেটিকে এই ব্লকের ভেতর রাখা হয়। পাইথন প্রথমে এই ব্লকের কোডটি চালানোর চেষ্টা করে।
২. except ব্লক:
try ব্লকের কোডে কোনো ভুল হলে প্রোগ্রাম ক্র্যাশ না করে সরাসরি এই ব্লকে চলে আসে। এখানে আমরা ব্যবহারকারীকে ভুলটির কারণ বা একটি বিকল্প সমাধান দেখাতে পারি।
৩. else ব্লক (ঐচ্ছিক):
try ব্লকের কোডে যদি কোনো ভুল না হয়, তবেই কেবল এই ব্লকের কোডটি রান করে।
৪. finally ব্লক (ঐচ্ছিক):
try ব্লকে ভুল হোক বা না হোক, এই ব্লকের কোডটি অবশ্যই রান করবে। সাধারণত ফাইল বন্ধ করা বা ডেটাবেজ কানেকশন বিচ্ছিন্ন করার মতো ক্লিন-আপ কাজের জন্য এটি ব্যবহৃত হয়।
একটি বাস্তব কোড উদাহরণ:
python
def divide_numbers(a, b):
try:
# এখানে ভুল হওয়ার সম্ভাবনা আছে (যদি b = 0 হয়)
result = a / b
except ZeroDivisionError:
# শূন্য দিয়ে ভাগ করার চেষ্টা করলে এই ব্লকটি কাজ করবে
print("ভুল: শূন্য (0) দিয়ে কোনো সংখ্যাকে ভাগ করা যায় না!")
except TypeError:
# সংখ্যার বদলে স্ট্রিং বা অন্য কিছু দিলে এই ব্লকটি কাজ করবে
print("ভুল: দয়া করে সঠিক সংখ্যা ইনপুট দিন।")
else:
# কোনো ভুল না হলে এটি কাজ করবে
print(f"ভাগফল হলো: {result}")
finally:
# এটি সবসময় কাজ করবেই
print("ভাগ করার প্রক্রিয়াটি সম্পন্ন হয়েছে।")
# পরীক্ষা করা যাক:
divide_numbers(10, 2) # কোনো ভুল হবে না (else এবং finally কাজ করবে)
print("-" * 30)
divide_numbers(10, 0) # ZeroDivisionError হবে (except এবং finally কাজ করবে)
Use code with caution.
কাস্টম এক্সেপশন (raise কি-ওয়ার্ড):
ডেভেলপার চাইলে নিজের মতো কোনো শর্তে ভুল তৈরি করতে পারেন raise কি-ওয়ার্ড ব্যবহার করে। যেমন:
python
age = -5
if age < 0:
raise ValueError("বয়স কখনো ঋণাত্মক হতে পারে না!")