पायथन स्ट्रिंग्स को सही संख्या में आर्गुमेंट्स का उपयोग करके फॉर्मेट किया जाना चाहिए। जब आपके द्वारा निर्दिष्ट आर्गुमेंट्स की संख्या उन मानों की संख्या से कम होती है जिन्हें आप स्ट्रिंग में फॉर्मेट करना चाहते हैं, तो आपको "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
पायथन को एक त्रुटि का सामना करना पड़ा है। आइए देखते हैं कि हम इसे कैसे हल कर सकते हैं।
समाधान #1: स्ट्रिंग फॉर्मेटिंग सिंटैक्स ठीक करें
हमने स्ट्रिंग फॉर्मेट करने के तरीके में गलती की है। % ऑपरेटर का उपयोग करते समय, जिन मानों को आप स्ट्रिंग में जोड़ना चाहते हैं उन्हें पैरेंथेसिस के भीतर संलग्न किया जाना चाहिए।
ऊपर के हमारे उदाहरण में, हम % चिह्न के बाद मानों को कॉमा-सेपरेटेड मानों की सूची के रूप में निर्दिष्ट करते हैं। यह सूची पैरेंथेसिस में प्रकट नहीं होती।
हम % चिह्न के बाद के मानों को पैरेंथेसिस में संलग्न करके अपनी त्रुटि ठीक करते हैं:
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.
हमारा कोड सफलतापूर्वक ऑनर रोल पर छात्रों की सूचना देने वाला संदेश लौटाता है।
समाधान #2: .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() मेथड का उपयोग कर सकते हैं।
अब आप इस सामान्य पायथन त्रुटि को एक विशेषज्ञ की तरह ठीक करने के लिए तैयार हैं!