IndentationErrors দুটি উদ্দেশ্য পরিবেশন করে: সেগুলো আপনার কোডকে আরও পঠনীয় করে তোলে এবং পাইথন ইন্টারপ্রেটারকে আপনার কোড সঠিকভাবে বুঝতে সাহায্য করে। আপনি যদি সেখানে একটি অতিরিক্ত স্পেস বা ট্যাব যোগ করেন যেখানে এটি প্রয়োজন নেই, তবে আপনি "IndentationError: unexpected indent" এররটির সম্মুখীন হবেন।
এই গাইডে, আমরা এই এররটির অর্থ এবং কেন এটি উঠে সেটি আলোচনা করব। আমরা আপনাকে আপনার প্রোগ্রামে এটিকে কীভাবে ঠিক করতে পারেন সেটি বুঝাতে এই এররটির একটি উদাহরণের মাধ্যমে যাব।
IndentationError: unexpected indent
একটি ইন্ডেন্ট (indent) হলো একটি নির্দিষ্ট সংখ্যক স্পেস বা ট্যাব যা নির্দেশ করে যে কোডের একটি লাইন একটি নির্দিষ্ট কোড ব্লকের অংশ। নিচের প্রোগ্রামটি বিবেচনা করুন:
def hello_world():
print("Hello, world!")
আমরা একটি একক ফাংশন সংজ্ঞায়িত করেছি: hello_world()। এই ফাংশনে একটি প্রিন্ট স্টেটমেন্ট আছে। পাইথনকে ইঙ্গিত দিতে যে এই কোডের লাইনটি আমাদের ফাংশনের অংশ, আমরা এটিকে ইন্ডেন্ট করেছি।
আপনি স্পেস বা ট্যাব ব্যবহার করে কোড ইন্ডেন্ট করতে পারেন, আপনার পছন্দের উপর নির্ভর করে। আপনাকে কোডটি শুধুমাত্র তখন ইন্ডেন্ট করতে হবে যখন সেই কোডটি অন্য একটি কোড ব্লকের অংশ হতে হবে। এতে অন্তর্ভুক্ত:
- একটি "if...else" স্টেটমেন্ট
- একটি "try...except" স্টেটমেন্ট
- একটি "for" লুপ
- একটি "function" স্টেটমেন্ট
পাইথন কোড অবশ্যই একসঙ্গে ইন্ডেন্ট করা উচিত যদি এটি একটি বিশেষ স্টেটমেন্টে প্রদর্শিত হয়। পাইথন ইন্ডেন্টেশন কঠোরভাবে এনফোর্স (enforce) করে।
জাভাস্ক্রিপ্ট (JavaScript) এর মতো কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ ইন্ডেন্টেশন কঠোরভাবে এনফোর্স করে না কারণ সেগুলো কোড ব্লক নির্দেশ করতে কার্লি ব্রেসেস ব্যবহার করে। পাইথনে এই বৈশিষ্ট্যটি নেই, তাই এই ল্যাঙ্গুয়েজটি ইন্ডেন্টেশনের ওপর ভারি মাত্রায় নির্ভর করে।
"IndentationError: unexpected indent" এররটির কারণ হলো আপনার কোডকে অতিরিক্তভাবে ইন্ডেন্ট করা, বা একটি কোড লাইন ইন্ডেন্ট করতে অনেক বেশি ট্যাব এবং স্পেস ব্যবহার করা।
আপনি যে অন্যান্য ইন্ডেন্টেশন এররগুলোতে সম্মুখীন হতে পারেন সেগুলো হলো:
- Unindent does not match any other indentation level
- Expected an indented block
একটি উদাহরণ পরিস্থিতি
আমরা একটি প্রোগ্রাম তৈরি করব যা একজন ব্যবহারকারীর কिये गये ক্রয়ের একটি লিস্টের মধ্য দিয়ে লুপ করবে এবং সেগুলো থেকে যেগুলো ২৫.০০ ডলারের বেশি সেগুলো কনসোলে প্রিন্ট করবে।
শুরুতে, ক্রয়ের একটি লিস্ট সংজ্ঞায়িত করুন:
purchases = [25.50, 29.90, 2.40, 57.60, 24.90, 1.55]
এরপর, আমরা একটি ফাংশন সংজ্ঞায়িত করি যা আমাদের ক্রয়ের লিস্টের মধ্য দিয়ে লুপ করবে এবং ২৫ ডলারের বেশি যেগুলো সেগুলো কনসোলে প্রিন্ট করবে:
def show_high_purchases(purchases):
for p in purchases:
if p > 25.00:
print("Purchase: ")
print(p)
show_high_purchases() ফাংশনটি একটি আর্গুমেন্ট গ্রহণ করে: ক্রয়ের লিস্ট যার মধ্য দিয়ে ফাংশনটি সার্চ করবে। ফাংশনটি এই লিস্টের মধ্য দিয়ে ইটারেট করে এবং একটি if স্টেটমেন্ট ব্যবহার করে চেক করে যে প্রতিটি ক্রয় ২৫.০০ ডলারের বেশি কিনা।
যদি একটি ক্রয় ২৫.০০ ডলারের বেশি হয়, তবে Purchase: স্টেটমেন্টটি কনসোলে প্রিন্ট হয়। তারপর, সেই ক্রয়ের দাম কনসোলে প্রিন্ট হয়। অন্যথায়, কিছুই হয় না।
আমাদের কোডটি রান করার আগে, আমাদের ফাংশনটি কল করুন এবং আমাদের ক্রয়ের লিস্টটি প্যারামিটার হিসেবে পাস করুন:
show_high_purchases(purchases)
আমাদের কোডটি রান করুন এবং ফলাফল দেখুন:
File "main.py", line 7
print(p)
^
IndentationError: unexpected indent
আমাদের কোড সফলভাবে রান হয়নি।
সমাধান
যেকোনো পাইথন এররটির মতো, আমাদের পুরো এরর মেসেজটি পড়তে হবে যাতে বুঝতে পারি কী হচ্ছে। সমস্যাটি লাইন ৭-এ দিকনির্দেশ করা হয়েছে, যা হলো যেখানে আমরা একটি ক্রয়ের মান প্রিন্ট করি।
if p > 25.00:
print("Purchase: ")
print(p)
আমরা অনিচ্ছাকৃতভাবে দ্বিতীয় print() স্টেটমেন্টটি ইন্ডেন্ট করে দিয়েছি। এটি একটি এরর করে কারণ আমাদের দ্বিতীয় print() স্টেটমেন্ট অন্য কোনো কোড ব্লকের অংশ নয়। এটি এখনও আমাদের if স্টেটমেন্টের অংশ।
এই এররটি সমাধান করতে, আমাদের নিশ্চিত করতে হবে যে আমরা আমাদের সকল print() স্টেটমেন্টগুলো একসঙ্গে ইন্ডেন্ট করেছি:
if p > 25.00:
print("Purchase: ")
print(p)
দুইটি print() স্টেটমেন্ট উভয়ই একই লেভেলের ইন্ডেন্টেশন ব্যবহার করা উচিত কারণ সেগুলো একই if স্টেটমেন্টের অংশ। আমরা উপরে এই সংশোধনটি করেছি।
আমাদের কোডটি রান করার চেষ্টা করুন:
Purchase: 25.5 Purchase: 29.9 Purchase: 57.6
আমাদের কোডটি সফলভাবে ২৫.০০ ডলারের বেশি মূল্যের সকল ক্রয় কনসোলে প্রিন্ট করেছে।
উপসংহার
"IndentationError: unexpected indent" তখন উঠে যখন আপনি একটি কোড লাইনকে অনেক বেশি বার ইন্ডেন্ট করেন। এই এররটি সমাধান করতে, নিশ্চিত করুন যে আপনার সকল কোড একসঙ্গে ইন্ডেন্টেশন ব্যবহার করে এবং কোনো অপ্রয়োজনীয় ইন্ডেন্ট নেই।
এখন আপনি এই এররটি একটি পাইথন এক্সপার্টের মতো ঠিক করতে পারেন!