যেকোনো প্রোগ্রামিং ল্যাঙ্গুয়েজে আমরা এক্সসেপশন উঠতে দেখি। পাইথনে অনেক বিল্ট-ইন এক্সসেপশন হ্যান্ডলিং মেকানিজম রয়েছে। কিছু এরর এই এক্সসেপশন নামগুলো দ্বারা হ্যান্ডল করা হয়। পাইথনে finally নামে একটি ব্লক রয়েছে যা এক্সসেপশন হ্যান্ডল করা হয়েছে কিনা তার পরবাহ না করেই এক্সিকিউট হয়।
সিনট্যাক্স
try:
# main python Code....
except:
# এটি অপশনাল ব্লক
# এক্সসেপশন হ্যান্ডল করার কোড
finally:
# এই কোড সবসময় এক্সিকিউট হয়
উদাহরণ
নিচের কোডে আমরা NameError এক্সসেপশন দেখি। এখানে আমরা একটি কোড তৈরি করি যা ঘোষণা না করা চরবিশেষকে রেফার করে। এক্সসেপশন হ্যান্ডল করা হলেও কোড "finally" ব্লকে চলে যায়। "finally" ব্লকের কোডও এক্সিকিউট হয়।
try:
var1 = 'Tutorials'
# NameError উত্থাপিত হবে
print(var2)
# এক্সসেপশন হ্যান্ডল করুন
except NameError:
print("variable is not found in local or global scope.")
finally:
# এক্সসেপশন জেনারেট হওয়ার পরবাহ না করেই
# এই ব্লক সবসময় এক্সিকিউট হয়
print('finally block code here')
আউটপুট
উপরোক্ত কোড চালালে নিচের ফলাফল পাবো:
variable is not found in local or global scope. finally block code here
এক্সসেপশন হ্যান্ডলিং ছাড়া
যদি আমরা কোড ডিজাইন করি যাতে এক্সসেপশন হ্যান্ডল না করা হয়। তবুও finally ব্লক অনহ্যান্ডল্ড এক্সসেপশনের জন্য কোড এক্সিকিউট করবে।
উদাহরণ
try:
var1 = 'Tutorials'
# NameError উত্থাপিত হবে
print(var2)
# কোনো এক্সসেপশন হ্যান্ডলিং নেই
finally:
# এক্সসেপশন জেনারেট হওয়ার পরবাহ না করেই
# এই ব্লক সবসময় এক্সিকিউট হয়
print('finally block code here')
আউটপুট
উপরোক্ত কোড চালালে নিচের ফলাফল পাবো:
finally block code here
Traceback (most recent call last):
File "xxx.py", line 4, in
print(var2)
NameError: name 'var2' is not defined