এই টিউটোরিয়ালে, আমরা পাইথনের try এবং except সম্পর্কে জানব। পাইথনে এরর এবং এক্সসেপশন হ্যান্ডলিং নামে একটি ধারণা রয়েছে।
try এবং except কীওয়ার্ডগুলো ইরর এবং এক্সসেপশন হ্যান্ডলিং-এ ব্যবহৃত হয়।
মূলত পাইথনে দুটি ধরনের ইরর পাওয়া যায়:
সিনট্যাক্স ইরর (Syntax errors): পাইথন যখন প্রোগ্রামের কোনো লাইন বুঝতে পারে না তখন এই ইরর দেখায়।
এক্সসেপশন ইরর (Exception errors): প্রোগ্রাম রানটাইমে সনাক্ত হওয়া ইরর। যেমন:
ZeroDivisionError,ValueErrorইত্যাদি।
সিনট্যাক্স ইরর রোধ করা সম্ভব নয়। কিন্তু try-except ব্যবহার করে প্রোগ্রাম রানটাইমে এক্সসেপশন ইরর হলে সেটি হ্যান্ডেল করা যায়। চলুন পাইথনের সবচেয়ে সাধারণ কিছু এক্সসেপশন ইরর দেখি।
ZeroDivisionError — যেকোনো সংখ্যা শূন্য (0) দিয়ে ভাগ করার চেষ্টা করলে।
ValueError — ফাংশনে অনুপযুক্ত ভ্যালু পাস করলে।
IndexError — উপলব্ধ নয় এমন ইনডেক্স অ্যাক্সেস করার চেষ্টা করলে।
KeyError — ডিকশনারিতে অনুপস্থিত কী অ্যাক্সেস করার চেষ্টা করলে।
ImportError — অস্তিত্বহীন মডিউল ইমপোর্ট করার চেষ্টা করলে।
IOError — পাইথন ফাইল ওপেন না করলে।
KeyboardInterrupt — ইউজার অনিচ্ছাকৃত কী প্রেস করলে।
পাইথনে আরও অনেক এক্সসেপশন ইরর রয়েছে। try-except দিয়ে এগুলো সহজে হ্যান্ডেল করা যায়। প্রথমে try-except-এর সিনট্যাক্স দেখি।
# try-except সিনট্যাক্স
try:
# স্টেটমেন্ট
# স্টেটমেন্ট
# ...
except:
# স্টেটমেন্ট
# স্টেটমেন্ট
# ...
পাইথন try-except ব্লকের কোড কীভাবে এক্সিকিউট করে? ধাপে ধাপে দেখি।
প্রথমে পাইথন try ব্লকের কোড এক্সিকিউট করে।
যদি কোডে কোনো এক্সসেপশন ইরর না থাকে, তবে except ব্লক এক্সিকিউট হয় না।
যদি কোনো এক্সসেপশন ইরর হয়, তবে try ব্লক বাদ দিয়ে except ব্লকের কোড এক্সিকিউট হয়।
যদি এক্সসেপশন ইরর হয় এবং except ব্লক সেটি হ্যান্ডেল না করতে পারে, তবে সংশ্লিষ্ট এক্সসেপশন ইরর উপস্থাপিত হয়।
একটি try ব্লকের জন্য একাধিক except স্টেটমেন্ট থাকতে পারে।
উদাহরণ
যেখানে কোনো এক্সসেপশন ইরর নেই সে কেসটি দেখি।
# কোনো এক্সসেপশন ইরর নেই
try:
arr = [1, 2, 3, 4, 5]
# বৈধ ইনডেক্স দিয়ে অ্যারে থেকে আইটেম অ্যাক্সেস
two = arr[1]
print(f"We didn't get any errors {two}")
except IndexError:
print("The given index is not valid")
আউটপুট
উপরোক্ত প্রোগ্রাম রান করলে নিচের ফলাফল পাবেন:
We didn't get any errors 2
কোনো এক্সসেপশন ইরর পাওয়া যাচ্ছি না। তাই try ব্লকের কোড এক্সিকিউট হয়েছে।
উদাহরণ
একই উদাহরণটি অবৈধ ইনডেক্সের সাথে দেখি।
# এক্সসেপশন ইরর থাকবে
try:
arr = [1, 2, 3, 4, 5]
# অবৈধ ইনডেক্স দিয়ে অ্যাক্সেস
six = arr[6]
print(f"We didn't get any errors {six}")
except IndexError:
print("The given index is not valid")
আউটপুট
উপরোক্ত কোড এক্সিকিউট করলে নিচের ফলাফল পাবেন:
The given index is not valid
try ব্লকে IndexError পাওয়া গেল। তাই except ব্লকের কোড এক্সিকিউট হয়েছে।
উদাহরণ
যদি except এক্সসেপশন হ্যান্ডেল না করতে পারে তবে কী হয় সেটি দেখি।
# except হ্যান্ডেল না করতে পারলে
try:
arr = [1, 2, 3, 4, 5]
# অবৈধ ইনডেক্স দিয়ে অ্যাক্সেস
six = arr[6]
print(f"We didn't get any errors {six}")
except ValueError:
print("The given index is not valid")
আউটপুট
উপরোক্ত কোড রান করলে নিচের ফলাফল পাবেন:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-11-fe3737d0615b> in <module>
3
4 arr = [1, 2, 3, 4, 5]
5 # accesing an item from array with a invalid index
----> 6 six = arr[6]
7 print(f"We didn't get any errors {six}")
8 except ValueError:
IndexError: list index out of range
এখানে ইরর পেলাম। except ব্লকে ValueError দিয়েছিলাম, কিন্তু আসলে IndexError হয়েছে যা except ব্লক হ্যান্ডেল করতে পারলো না। তাই ইরর পেলাম। except ব্লকে এক্সসেপশন টাইপ নির্দিষ্ট করার সময় সাবধান থাকতে হবে।
উপসংহার
এই টিউটোরিয়াল সম্পর্কে আপনার কোনো প্রশ্ন থাকলে কমেন্ট সেকশনে জানাতে পারেন।