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 <module>
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 <module>
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 <module>
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 <module>
from math import cube
ImportError: cannot import name 'cube'

 

Type Error

দুইটি ভিন্ন `type` এর ভ্যালু নিয়ে অনুপযুক্ত অপারেশন করতে চাইলে TypeError দেখাবে।
>>> [1,2,3] + "2"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

 

Name Error

যদি কোন variable আগে ডিক্লেয়ার না করা হয়ে থাকে , এবং সেটি যদি ব্যবহার করতে চাই , তাইলে NameError দেখাবে ।
>>> name="vivasoft"
>>> vivasoft
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'vivasoft' is not defined

 

Zero Division Error

ম্যাথমেটিক্যালি কোন সংখ্যাকে শূন্য দিয়ে ভাগ করা যায় না। পাইথন ও এই কাজটি করা যায় না , করতে চাইলে এরর পাবো।
>>> 9/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

 

Indentation Error

পাইথন ডেভেলপারগণ বেশ গর্ব করেই বলে থাকেন যে “No Braket, no Semicolon – only Indentation” । তাই বুঝতেই পারছেন Indentation maintain করাটা কতটা গুরুত্ত্বপূর্ন।
for i in range(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 "<string>", 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 in range(10):
    x = i + 10
    print(x)

আউটপুট

File "<string>", 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 এরর বলতে কি বুঝো এই এরর কিছু উদাহরণ দেন ?
  • রানটাইম এরর বলতে কি বুঝো এই এরর কিছু উদাহরণ দেন ?