Error & Exception in Python
প্রোগ্রামিং ল্যাঙ্গুয়েজ এর কাজ হচ্ছে আমাদের ( প্রোগ্রামার ) দেয়া ” এ সেট অফ ইন্সট্রাকশন্স ” নিয়ে কম্পিউটারকে দিয়ে সেই ইন্সট্রাকশন কমপ্লিট করা। কিন্তু, প্রতিটি প্রোগ্রামিং ল্যাঙ্গুয়েজ এর কিছু নির্দিষ্ট ধরণের ইন্সট্রাকশন আছে. যেগুলো আমাদের অনুসরণ করে কোড লিখতে হয়, এর বাইরে কোন কিছু লিখলেই প্রোগ্রামিং ল্যাঙ্গুয়েজগুলো বুঝতে পারে না। এবং চমৎকার! কিছু ভুল মেসেজ দেখায়। এগুলোকেই আমরা ব্যাপক অর্থে error এবং exception বলে থাকি।
চলুন এই সেশনে , আমরা Python এর কিছু কমন error এবং exception সম্পর্কে জেনে আসি।
Index Error
যখন আমরা কোন List / Tuple এর ভুল ইনডেক্স ( index ) থেকে ডেটা ( item ) হ্যান্ডেল করতে চাই তখন Python এই এরর দেখায়। ধরুন , আমাদের কাছে তিনটি আইটেম এর একটি লিস্ট আছে. কিন্তু আমরা 5 নম্বর index থেকে কোনো ভ্যালু এক্সেস করতে চাই, তখন কি হতে পারে ?
items = [1,2,3] print(items[5])
Terminal এ আমরা নিচের লেখাটি দেখতে পারবো
Traceback(most recent call last): File "main.py", line 2, in print(items[5]) IndexError: list index out of range
Module Not Found Error
এমন কোন module আমরা import করতে চাইলাম যেটার আসলে কোন অস্তিত্ব নেই। তখন Python আমাদের কে এই এরর দেখায়।
import helloworldmodule print("Hello")
Terminal এ আমরা নিচের লেখাটি দেখতে পারবো
Traceback(most recent call last): File "main.py", line 1, in import helloworldmodule ModuleNotFoundError: No module named 'helloworldmodule'
Key Error
Dictionary থেকে এমন একটি Key নিয়ে কাজ করতে চাইলাম , যেটি আসলে Dictionary তে নেই। তখন এই error খাবো।
my_dict ={ "fname" : "Viva", "lname" : "Soft" } print(my_dict["age"])
Terminal এ আমরা নিচের লেখাটি দেখতে পারবো
Traceback(most recent call last): File "main.py", line 6, in print(my_dict["age"]) KeyError: 'age'
Import Error
একটা module থেকে এমন কিছু import করলাম , যা সেই module এ নেই । তখন Python আমাদের কে এই এরর দেখায়। আমরা যদি math module থেকে cube ফাংশনটা import করতে চাই তাইলে কি হবে?
from math import cube print(cube(5))
Terminal এ আমরা নিচের লেখাটি দেখতে পারবো
Traceback(most recent call last): File "main.py", line 1, in from math import cube ImportError: cannot import name 'cube'
Type Error
দুইটি ভিন্ন type এর ভ্যালু নিয়ে অনুপযুক্ত অপারেশন করতে চাইলে TypeError দেখাবে।
>>>[1,2,3] + "2" Traceback(most recent call last): File "", line 1, in TypeError: can only concatenate list(not"str") to list
Name Error
যদি কোন variable আগে ডিক্লেয়ার না করা হয়ে থাকে , এবং সেটি যদি ব্যবহার করতে চাই , তাইলে NameError দেখাবে ।
>>> name="vivasoft" >>> vivasoft Traceback(most recent call last): File "", line 1, in NameError: name 'vivasoft'isnot defined
Zero Division Error
ম্যাথমেটিক্যালি কোন সংখ্যাকে শূন্য দিয়ে ভাগ করা যায় না। পাইথন ও এই কাজটি করা যায় না , করতে চাইলে এরর পাবো।
>>>9/0 Traceback(most recent call last): File "", line 1, in ZeroDivisionError: division by zero
Indentation Error
পাইথন ডেভেলপারগণ বেশ গর্ব করেই বলে থাকেন যে “No Braket, no Semicolon – only Indentation” । তাই বুঝতেই পারছেন Indentation maintain করাটা কতটা গুরুত্ত্বপূর্ন।
for i inrange(10): x = i + 10 print(x)
# Output File "main.py", line 3 print(x) ^ IndentationError: unindent does not match any outer indentation level
পাইথন এর কোন Framework / Library / Module / Package ব্যবহার করতে সেখানকার ডিমান্ড অনুযায়ী অন্য Error / Exception কোন ঘটতে পারে। কিন্তু , আমরা এতক্ষন পাইথন এর বিল্ট-ইন কমন এররগুলো দেখলাম। এরর এবং এক্সেপশন সম্পর্কে ভালো ধারণা থাকা খুবই জরুরি।
উদাহরন
উদাহরণ ১
সিনট্যাক্স এরর সাধারণত আমাদের প্রোগ্রাম রান করার সময় ই খেয়ে থাকি এবং এই এরর খেলে আমাদের কোড রান করবে নাহ ।
x=123 if x==123 print("Hello")
File "", line 2 if x==123 ^ SyntaxError: invalid syntax
উদাহরণ ২
আমাদের কোড অনেক সময় ঠিক ভাবে রান হয় কিন্তু আমাদের ইনপুট বা লজিক বা আরো অন্য কিছু ভুলের জন্য পরবর্তীতে এরর খেয়ে থাকি আমরা –
যেমন ধরেন ম্যাথমেটিক্যালি কোন সংখ্যাকে শূন্য দিয়ে ভাগ করা যায় না । এই কোড আমাদের কম্পাইল করার সময় কোন এরর দেয় নাহ কিন্তু আউটপুট দেখতে গেলে আমরা এরর খাবো নিচের মত
print(10/0)
ZeroDivisionError: division by zero
উদাহরণ ৩
দুইটি ভিন্ন type এর ভ্যালু নিয়ে অনুপযুক্ত অপারেশন করতে গেলে আমাদের TypeError দেখায়
print(10/"two")
TypeError: unsupported operand type(s)for /: 'int' and 'str'
উদাহরণ ৪
যদি কোন variable আগে ডিক্লেয়ার না করা হয়ে থাকে বা যদি আমরা কোন ভারিয়াবেল ডিলেট করে অই ভ্যালুর এক্সেস পেতে চাই তবে সেক্ষেত্রে আমাদের NameError দেখায়
x = 10 print("x = ", x) del x print("x = ", x)
x = 10 NameError: name 'x' is not defined
উদাহরণ ৫
পাইথন যেহেতু কোন ব্যাকেট বা সেমিকোলন নাই তাই Indentation কোডিং জন্য সব কিছু নির্ভর করে যদি কোন কারণে আমাদের Indentation উলটাপালটা করে থাকি তবে IndentationError খেয়ে থাকি
for i inrange(10): x = i + 10 print(x)
File "", line 3 print(x) ^ IndentationError: unindent does not match any outer indentation level
এসো নিজে করি
অনুশীলনঃ
- ডিরেক্টরিতে নাই এমন একটি টেক্সট ফাইলের নাম দিয়ে , ফাইলটি ওপেন করার কোড লিখুন
- Value Error generate করে এমন একটি কোড লিখুন
- 10 টি আইটেমযুক্ত একটি লিস্টের ১০ নম্বর ইনডেক্স এর ভ্যালু কি হবে ?
- Index Error generate করে এমন একটি কোড লিখুন
- Type Error generate করে এমন একটি কোড লিখুন
ইন্টারভিউ প্রশ্নোত্তর
গুরুত্বপূর্ন প্রশ্নসমুহ
- পাইথনে এরর বলতে কি বুঝো ?
- পাইথনে সাধারণত কয় ধরনের এরর দেখা যায় ?
- আপনার জানা কিছু standard পাইথন এরর এর নাম বলেন ?
- syntax এরর বলতে কি বুঝো এই এরর কিছু উদাহরণ দেন ?
- রানটাইম এরর বলতে কি বুঝো এই এরর কিছু উদাহরণ দেন ?