पायथन नियमों का सख्त है। पायथन भाषा की मुख्य विशेषताओं में से एक आपको चेक में रखती है ताकि आपके प्रोग्राम उस तरह से काम करें जैसा आप चाहते हैं। जब आप स्ट्रिंग्स के साथ काम कर रहे होते हैं तो आपको "not all arguments converted during string formatting" कहते हुए एक त्रुटि का सामना करना पड़ सकता है।
इस गाइड में, हम इस त्रुटि के बारे में बात करते हैं और यह क्यों सामने आती है। हम इसे अपने कोड में हल करने में आपकी मदद करने के लिए दो सामान्य परिदृश्यों से गुजरेंगे जहां यह त्रुटि उठाई जाती है।
बिना किसी देरी के, शुरू करते हैं!
समस्या: typeerror: not all arguments converted during string formatting
एक TypeError एक प्रकार की त्रुटि है जो हमें बताती है कि हम एक ऐसा कार्य कर रहे हैं जिसे एक निश्चित प्रकार के मान पर निष्पादित नहीं किया जा सकता। इस मामले में, हमारी टाइप एरर एक स्ट्रिंग मान से संबंधित है।
पायथन कई तरीके प्रदान करता है जिनसे आप स्ट्रिंग्स को फॉर्मेट कर सकते हैं। यह आपको स्ट्रिंग्स में मान डालने या स्ट्रिंग के अंत में मान जोड़ने की अनुमति देता है।
स्ट्रिंग्स को फॉर्मेट करने के दो सबसे आम तरीके हैं:
- % ऑपरेटर का उपयोग करना (पुरानी शैली)
- .format() फ़ंक्शन के साथ {} ऑपरेटर का उपयोग करना
जब आप इन दोनों सिंटैक्स को एक साथ उपयोग करने का प्रयास करते हैं, तो एक त्रुटि उठाई जाती है।
उदाहरण: स्ट्रिंग फॉर्मेटिंग नियमों को मिलाना
आइए एक प्रोग्राम लिखते हैं जो एक बेकरी में बेचे जाने वाले उत्पाद पर 5% मूल्य वृद्धि की गणना करता है।
हम उपयोगकर्ता से दो जानकारी एकत्र करके शुरू करते हैं: उत्पाद का नाम और उत्पाद की कीमत। हम इसे input() स्टेटमेंट का उपयोग करके करते हैं:
name = input("Enter the name of the product: ")
price = input("Enter the price of the product: ")
अगला, हम "price" के मान को 1.05 से गुणा करके उत्पाद की नई कीमत की गणना करते हैं। यह 5% मूल्य वृद्धि को दर्शाता है:
increase = round(float(price) * 1.05, 2)
हम round() स्टेटमेंट का उपयोग करके "increase" के मान को दो दशमलव स्थानों तक राउंड करते हैं। अंत में, नई कीमत को कंसोल पर प्रिंट करने के लिए स्ट्रिंग फॉर्मेटिंग का उपयोग करें:
print("The new price of {} is ${}. " % name, str(increase))
यह कोड "name" और "increase" के मानों को हमारे स्ट्रिंग में जोड़ता है। हम "increase" को स्ट्रिंग में मर्ज करने के लिए एक स्ट्रिंग में बदलते हैं। रूपांतरण से पहले, "increase" एक फ्लोटिंग-पॉइंट नंबर है। हमारा कोड चलाएं और देखें क्या होता है:
Traceback (most recent call last): File "main.py", line 6, in> ऐसा प्रतीत होता है कि हमारे कोड की अंतिम पंक्ति पर एक त्रुटि है।print("The new price of {} is {}" % name, str(discount)) TypeError: not all arguments converted during string formatting
समस्या यह है कि हमने अपने स्ट्रिंग फॉर्मेटिंग सिंटैक्स को मिला दिया। हमने {} और % ऑपरेटर्स का उपयोग किया। ये दो अलग-अलग प्रकार के स्ट्रिंग फॉर्मेटिंग के लिए उपयोग किए जाते हैं।
इस समस्या को हल करने के लिए, हम अपने प्रोग्रामिंग की अंतिम पंक्ति को निम्न दो कोड लाइनों में से किसी एक से बदल देते हैं:
print("The new price of {} is ${}.".format(name, str(increase)))
print("The new price of %s is $%s." % (name, str(increase)))
कोड की पहली पंक्ति .format() सिंटैक्स का उपयोग करती है। यह {} के मानों को .format() स्टेटमेंट में निर्दिष्ट क्रम में मानों से बदल देता है।
कोड की दूसरी पंक्ति पुरानी शैली % स्ट्रिंग फॉर्मेटिंग तकनीक का उपयोग करती है। "%s" मानों को % ऑपरेटर के बाद पैरेंथेसिस में संलग्न मानों से बदल दिया जाता है।
आइए अपना कोड फिर से चलाते हैं और देखते हैं क्या होता है:
Enter the name of the product: Babka Enter the price of the product: 2.50 The new price of Babka is $2.62.
हमारा कोड सफलतापूर्वक हमारे आर्गुमेंट्स को हमारे स्ट्रिंग में जोड़ता है।
उदाहरण: मॉड्यूलो ऑपरेटर को भ्रमित करना
पायथन प्रतिशत चिह्न (%) का उपयोग मॉड्यूलो नंबर और स्ट्रिंग फॉर्मेटिंग की गणना के लिए करता है। मॉड्यूलो नंबर एक विभाजन योग के बाद बचा हुआ शेष है।
यदि आप किसी स्ट्रिंग पर प्रतिशत चिह्न का उपयोग करते हैं, तो इसका उपयोग फॉर्मेटिंग के लिए किया जाता है; यदि आप किसी नंबर पर प्रतिशत चिह्न का उपयोग करते हैं, तो इसका उपयोग मॉड्यूलो की गणना के लिए किया जाता है। इसलिए, यदि कोई मान स्ट्रिंग के रूप में फॉर्मेट किया गया है जिस पर आप मॉड्यूलो गणना करना चाहते हैं, तो एक त्रुटि उठाई जाती है।
एक ऐसे प्रोग्राम पर नज़र डालें जो गणना करता है कि कोई संख्या विषम है या सम:
number = input("Please enter a number: ")
mod_calc = number % 2
if mod_calc == 0:
print("This number is even.")
else:
print("This number is odd.")
सबसे पहले, हम उपयोगकर्ता से एक संख्या दर्ज करने के लिए कहते हैं। फिर हम मॉड्यूलो ऑपरेटर का उपयोग करके शेष की गणना करते हैं जो तब लौटाया जाता है जब "number" को 2 से विभाजित किया जाता है।
यदि मॉड्यूलो ऑपरेटर द्वारा लौटाया गया मान 0 के बराबर है, तो हमारे if स्टेटमेंट की सामग्री निष्पादित होती है। अन्यथा, else स्टेटमेंट की सामग्री चलती है।
आइए अपना कोड चलाते हैं:
Please enter a number: 7 Traceback (most recent call last): File "main.py", line 2, inmod_calc = number % 2 TypeError: not all arguments converted during string formatting
एक और TypeError। यह त्रुटि उठाई जाती है क्योंकि "number" एक स्ट्रिंग है। input() मेथड एक स्ट्रिंग लौटाता है। यदि हम मॉड्यूलो गणना करना चाहते हैं तो हमें "number" को फ्लोटिंग-पॉइंट या इंटीजर में बदलने की आवश्यकता है।
हम float() फ़ंक्शन का उपयोग करके "number" को फ्लोट में बदल सकते हैं:
mod_calc = float(number) % 2
आइए अपना कोड फिर से चलाने का प्रयास करते हैं:
Please enter a number: 7 This number is odd.
हमारा कोड काम करता है!
निष्कर्ष
"not all arguments converted during string formatting" त्रुटि तब उठाई जाती है जब पायथन स्ट्रिंग फॉर्मेट ऑपरेशन में सभी आर्गुमेंट्स को नहीं जोड़ता। यह तब होता है जब आप अपने स्ट्रिंग फॉर्मेटिंग सिंटैक्स को मिलाते हैं या जब आप किसी स्ट्रिंग पर मॉड्यूलो ऑपरेशन करने का प्रयास करते हैं।
अब आप इस सामान्य पायथन त्रुटि को एक पेशेवर सॉफ्टवेयर इंजीनियर की तरह हल करने के लिए तैयार हैं!