পাইথন স্ট্রিংগুলোকে সঠিক সংখ্যক আর্গুমেন্ট ব্যবহার করে ফরম্যাট করা উচিত। যখন আপনি স্পেসিফাই করা আর্গুমেন্টের সংখ্যা স্ট্রিং-এ ফরম্যাট করতে চাওয়া ভ্যালুর সংখ্যার চেয়ে কম হয়, আপনি "TypeError: not enough arguments for format string" এররটির মত একটি এরর এনকাউন্টার করবেন।
এই গাইডে, আমরা এই এরর কী বোঝায় এবং কেন এটি উঠে সেটি আলোচনা করব। আমরা একটি উদাহরণের মাধ্যমে যাব যাতে আপনি বুঝতে পারেন আপনি আপনার কোডে এই এররটি কীভাবে সমাধান করতে পারেন।
TypeError: not enough arguments for format string
আমাদের এররটি একটি TypeError। এর মানে আমরা একটি এমন টাস্ক করার চেষ্টা করেছি যেটি সেই অপারেশনের আন্ডারলাইং ডেটা টাইপ সাপোর্ট করে না।
এই কেসে, আমরা স্ট্রিং ফরম্যাটিং নিয়ে কাজ করছি। পাইথন আমাদের বলে দিচ্ছে যে আমরা একটি স্ট্রিং ফরম্যাট করার समय একটি ভুল করেছি।
যখন আপনি একটি স্ট্রিং ফরম্যাট করেন, আপনি যে আর্গুমেন্টের সংখ্যা স্পেসিফাই করেন সেটি আপনি যে ভ্যালুগুলো স্ট্রিং-এ ফরম্যাট করতে চান তার সংখ্যার সমান হতে হবে। অন্যথায়, আপনি একটি এরর এনকাউন্টার করবেন।
একটি উদাহরণ সিনেরিও
এই এররটি উঠার একটি সাধারণ সिचুয়েশন হল যখন আপনি % স্ট্রিং ফরম্যাটে আর্গুমেন্টগুলো প্যারেনথেসিসে এনক্লোজ করা ভুলে যান। এই সিনট্যাক্স % অপারেটর ব্যবহার করে একটি স্ট্রিং-এ ভ্যালু অ্যাড করে।
এখানে, আমরা একটি অ্যাপ বিল্ড করছি যা অনর রোলে থাকা ছাত্রদের নামের একটি লিস্টকে একটি স্ট্রিং-এ ফরম্যাট করে। আমরা ছাত্রদের নামের একটি লিস্ট ডিফাইন করে শুরু করি:
students = ["Andy", "Malcolm", "Lindsay", "Lucy"]
পরবর্তীতে, আমরা এই ভ্যালুগুলো % সিনট্যাক্স ব্যবহার করে একটি স্ট্রিং-এ ফরম্যাট করি:
honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3] print(honor_roll)
আমরা আমাদের "students" অ্যারে থেকে চারটি নাম "honor_roll" স্ট্রিং-এ ফরম্যাট করি। আমরা আমাদের স্ট্রিং-এ %s ব্যবহার করি ইঙ্গিত দেওয়ার জন্য যে ভ্যালুগুলো কোথায় ফরম্যাট করা উচিত। % ব্যবহার করা হয় স্ট্রিং-এ পরের ধাপে যে ভ্যালুগুলো আমরা আমাদের স্ট্রিং-এ অ্যাড করতে চাই সেটি স্পেসিফাই করার জন্য।
আমাদের কোড রান করি এবং দেখি কী হয়:
Traceback (most recent call last): File "main.py", line 3, inhonor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3] TypeError: not enough arguments for format string
পাইথন একটি এরর এনকাউন্টার করল। চলুন দেখি কীভাবে আমরা এটি সমাধান করতে পারি।
সমাধান #১: স্ট্রিং ফরম্যাটিং সিনট্যাক্স ফিক্স করা
আমরা স্ট্রিং ফরম্যাট করার পদ্ধতিতে একটি ভুল করেছি। % অপারেটর ব্যবহার করার সময়, আপনি যে ভ্যালুগুলো একটি স্ট্রিং-এ অ্যাড করতে চান সেগুলো প্যারেনথেসিসে এনক্লোজ করা থাকতে হবে।
আমাদের উপরের উদাহরণে, আমরা স্ট্রিং-এ অ্যাড করার ভ্যালুগুলো একটি কমা-সেপারেটেড ভ্যালুর লিস্ট হিসেবে স্পেসিফাই করেছি। এই লিস্টটি প্যারেনথেসিসে দেখায় না।
আমরা আমাদের এররটি ফিক্স করি % সাইনের পরের ভ্যালুগুলোকে প্যারেনথেসিসে এনক্লোজ করে:
honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % (students[0], students[1], students[2], students[3])
চলুন আমাদের কোড রান করি:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
আমাদের কোড সফলভাবে অনর রোলে থাকা ছাত্রদের জানিয়ে একটি মেসেজ রিটার্ন করল।
সমাধান #২: .format() ব্যবহার করা
% সিনট্যাক্স আউটডেটেড হওয়া শুরু করেছে। স্ট্রিং ফরম্যাট করার অন্যান্য মেথড আছে যেমন .format() মেথড যা মডার্ন পাইথন কোডে বেশি ফেভারড।
আমাদের সমস্যাটি সমাধান করতে, আমরা % সিনট্যাক্সের বদলে .format() সিনট্যাক্স ব্যবহার করতে পারি:
honor_roll = "{}, {}, {}, and {} are on the CK High School Honor Roll.".format(students[0], students[1], students[2], students[3])
এই সিনট্যাক্সের স্ট্রাকচার % মেথডের সাথে সিমিলার। আমাদের স্ট্রিং-এ, আমরা {} ব্র্যাকেট ব্যবহার করি ইঙ্গিত দেওয়ার জন্য যে আমরা কোথায় ভ্যালু অ্যাড করতে চাই।
আমরা .format() মেথড ব্যবহার করি সেই ভ্যালুর লিস্ট স্পেসিফাই করার জন্য যেগুলো আমরা আমাদের স্ট্রিং-এ অ্যাড করতে চাই। চলুন আমাদের কোড রান করি:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
আমাদের প্রোগ্রাম সফলভাবে অনর রোলে থাকা ছাত্রদের নামের লিস্ট আমাদের দেখাল। এই লিস্ট একটি স্ট্রিং-এর অংশ হিসেবে ফরম্যাট করা হয়েছে।
উপসংহার
"TypeError: not enough arguments for format string" এররটি উঠে যখন একটি স্ট্রিং ফরম্যাট অপেশনে স্পেসিফাই করা আর্গুমেন্টের সংখ্যা আপনি যে ভ্যালুগুলো একটি স্ট্রিং-এ অ্যাড করতে চান তার সংখ্যার সমান নয়।
এই সমস্যাটি সমাধান করতে, প্রথমে নিশ্চিত করুন যে আপনি সকল আর্গুমেন্ট কার্লি ব্র্যাকেট ()-এ এনক্লোজ করেছেন যদি আপনি % অপারেটর ব্যবহার করছেন। আপনি % সিনট্যাক্সের রিপ্লেসমেন্ট হিসেবে .format() মেথড ব্যবহার করতে পারেন যদি আপনি এই এররটি ফিক্স করতে চান এবং আপনার কোড মডার্নাইজ করতে চান।
এখন আপনি এই সাধারণ পাইথন এররটি এক্সপার্টের মতো ফিক্স করার জন্য রেডি!