আপনি একটি পাইথন প্রোগ্রামে স্পেস (spaces) বা ট্যাব (tabs) ব্যবহার করে কোড ইন্ডেন্ট (indent) করতে পারেন। আপনি যদি একই কোড ব্লকে উভয়ই ব্যবহার করার চেষ্টা করেন, তবে আপনি "TabError: inconsistent use of tabs and spaces in indentation" এররটির সম্মুখীন হবেন।
এই গাইডে, আমরা এই এররটির অর্থ এবং কেন এটি উঠে সেটি আলোচনা করব। আমরা এই এররটির একটি উদাহরণের মাধ্যমে যাব যাতে আপনি আপনার কোডে এটিকে কীভাবে সমাধান করবেন সেটি বুঝতে পারেন।
TabError: inconsistent use of tabs and spaces in indentation
পাইথন স্টাইল গাইড বলতে 스페েস ইন্ডেন্টেশনের জন্য প্রিয় পদ্ধতি বলে গিয়েও, আপনি স্পেস বা ট্যাব যেকোনো একটি ব্যবহার করতে পারেন।
পাইথনে ইন্ডেন্টেশন গুরুত্বপূর্ণ কারণ এই ল্যাঙ্গুয়েজটি কোড ব্লক কোথায় শুরু এবং কোথায় শেষ হয় সেটি নির্দেশ করতে কার্লি ব্রেসেস (curly brackets) এর মতো সিনট্যাক্সের ওপর নির্ভর করে না। ইন্ডেন্টেশন পাইথনকে বলে কোন লাইনগুলো কোন কোড ব্লকের অংশ।
নিচের প্রোগ্রামটি বিবেচনা করুন:
numbers = [8, 7, 9, 8, 7]
def calculate_average_age():
average = sum(numbers) / len(numbers)
print(average)
ইন্ডেন্টেশন ছাড়া, কোন লাইনগুলো calculate_average_age ফাংশনের অংশ এবং কোন লাইনগুলো মূল প্রোগ্রামের অংশ সেটি জানা অসম্ভব।
আপনাকে স্পেস বা ট্যাব যেকোনো একটি ব্যবহার করতে হবে। ট্যাব এবং স্পেস মিশিয়ে ব্যবহার করবেন না। এটি করলে পাইথন ইন্টারপ্রেটার বিভ্রান্ত হয়ে যাবে এবং "TabError: inconsistent use of tabs and spaces in indentation" এররটি হবে।
একটি উদাহরণ পরিস্থিতি
আমরা একটি ডোনাট স্টোরে কिये गये ক্রয়ের মোট মান গণনা করার একটি প্রোগ্রাম তৈরি করব। শুরুতে, ক্রয়ের একটি লিস্ট সংজ্ঞায়িত করুন:
purchases = [2.50, 4.90, 5.60, 2.40]
এরপর, আমরা একটি ফাংশন সংজ্ঞায়িত করব যা "purchases" লিস্টের মোট গণনা করবে:
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
আমাদের ফাংশন একটি প্যারামিটার গ্রহণ করে: সেই ক্রয়ের লিস্ট যার মোট মান আমরা গণনা করতে চাই। ফাংশনটি প্যারামিটার হিসেবে নির্দিষ্ট লিস্টের মোট মান ফেরত দেয়।
আমরা "purchases" লিস্টের সংখ্যাগুলোর মোট গণনা করতে sum() মেথড ব্যবহার করি।
আপনি যদি এই কোড স্নিপেটটি আপনার টেক্সট এডিটরে কপি করেন, তবে আপনি লক্ষ্য করতে পারেন "return total" লাইনটি স্পেস ব্যবহার করে ইন্ডেন্ট করা হয়েছে тогда যা "total = sum(purchases)" লাইনটি ট্যাব ব্যবহার করে ইন্ডেন্ট করা হয়েছে। এটি একটি গুরুত্বপূর্ণ পার্থক্য।
এরপর, আমাদের ফাংশনটি কল করুন এবং এটি যা ফেরত দেয় সেটি কনসোলে প্রিন্ট করুন:
total_purchases = calculate_total_purchases(purchases) print(total_purchases)
আমাদের কোড calculate_total_purchases() ফাংশনটি কল করে ডোনাট স্টোরে কिये गये সকল ক্রয়ের মোট মান গণনা করতে। তারপর আমরা সেই মানটি কনসোলে প্রিন্ট করি। আমাদের কোডটি রান করুন এবং ফলাফল দেখুন:
File "test1.py", line 5
return total
^
TabError: inconsistent use of tabs and spaces in indentation
আমাদের কোড একটি এরর ফেরত দিচ্ছে।
সমাধান
আমরা আমাদের কোড ইন্ডেন্ট করতে স্পেস এবং ট্যাব উভয়ই ব্যবহার করেছি। একটি পাইথন প্রোগ্রামে, আপনাকে এই দুটি পদ্ধতির যেকোনো একটি ব্যবহার করতে হবে।
আমাদের কোডটি ঠিক করতে, আমরা আমাদের ফাংশনটি পরিবর্তন করব যাতে আমরা শুধু স্পেস ব্যবহার করি:
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
আমাদের কোড ইন্ডেন্টেশনের জন্য ৪ স্পেস ব্যবহার করে। আমাদের নতুন ইন্ডেন্টেশন দিয়ে প্রোগ্রামটি রান করুন:
15.4
আমাদের প্রোগ্রামটি সফলভাবে ডোনাট ক্রয়ের মোট মান গণনা করেছে।
IDLE এডিটরে, আপনি কোড ব্লকের ইন্ডেন্টেশন সরাতে নিচের নির্দেশাবলী অনুসরণ করতে পারেন:
- যে কোডটির ইন্ডেন্টেশন সরাতে চান সেটি সিলেক্ট করুন
- "Menu" -> "Format" -> "Untabify region" ক্লিক করুন
- আপনি যে ধরনের ইন্ডেন্টেশন ব্যবহার করতে চান সেটি ইনসার্ট করুন
এটি একটি ডকুমেন্টে ফরম্যাটিং ঠিক করার একটি সুবিধাজনক উপায়, ধরে নিচ্ছি আপনি IDLE এডিটর ব্যবহার করছেন। সাবলাইম টেক্সট (Sublime Text) এর মতো অন্যান্য অনেক এডিটরের ফাইলে ইন্ডেন্টেশন পরিবর্তন করার তাদের নিজস্ব পদ্ধতি আছে।
উপসংহার
পাইথন "TabError: inconsistent use of tabs and spaces in indentation" এররটি তখন উঠে যখন আপনি কোড ইন্ডেন্ট করতে উভয় স্পেস এবং ট্যাব ব্যবহার করার চেষ্টা করেন।
আপনি একটি প্রোগ্রামে যেকোনো একটি পদ্ধতিতে আঁকিয়ে এবং আপনার পছন্দের ইন্ডেন্টেশন পদ্ধতি ব্যবহার না করা যেকোনো ট্যাব বা স্পেসকে প্রতিস্থাপন করে এই এররটি সমাধান করেন। এখন আপনার কাছে এই এররটি একজন প্রফেশনাল প্রোগ্রামারের মতো সমাধান করার জ্ঞান আছে!