पायथन टाइपर्रर: प्रारूप स्ट्रिंग के लिए पर्याप्त तर्क नहीं


138

यहाँ आउटपुट है। ये utf-8 तार हैं मेरा मानना ​​है कि ... इनमें से कुछ भी कोई भी हो सकता है लेकिन यह तुरंत विफल हो जाता है, इससे पहले कि वे इस तरह ...

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl

TypeError: प्रारूप स्ट्रिंग के लिए पर्याप्त तर्क नहीं

इसके 7 के लिए हालांकि 7?

जवाबों:


177

ध्यान दें कि %स्ट्रिंग्स को फॉर्मेट करने का सिंटैक्स पुराना हो गया है। यदि पायथन का आपका संस्करण इसका समर्थन करता है, तो आपको लिखना चाहिए:

instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl)

यह आपके द्वारा की गई त्रुटि को भी ठीक करता है।


क्या यह लॉगिंग मॉड्यूल के लिए भी काम करता है? क्या इस तरह के प्रक्षेप को इसके द्वारा समझा जाता है?
AllTradesJack

@ जोशस्वॉस: हां, यहां कुछ लिंक दिए गए हैं जो संभावनाओं पर चर्चा करते हैं: Bugs.python.org/issue14031
शिमोन

4
@SimeonVisser, यह पुराना क्यों हो रहा है? यदि आप, उदाहरण के लिए, प्रारूप स्ट्रिंग को संग्रहीत करने के लिए एक चर का उपयोग करते हैं और आप स्ट्रिंग को उसी मान के साथ बदलना चाहते हैं, जिसमें आपको स्वरूपित%% = ('bla', 'bla', 'bla') के साथ बस एक tad bit क्लीनर कोड मिलता है। । इस बारे में कुछ उपयोगी लिंक को विस्तृत या इंगित करने की देखभाल?
जोका

.format () को जोड़ा गया क्योंकि यह काफी सामान्य है और इसे करने के लिए ऑपरेटर की आवश्यकता नहीं होनी चाहिए। आपका उदाहरण अच्छा है लेकिन एक नवागंतुक को समझाना मुश्किल है। नोटेशन a = a.format (1,2,3) बहुत अधिक स्पष्ट और समझने / सिखाने में आसान है। मेरे पास लिंक नहीं है लेकिन यह मुख्य कारण है कि प्रारूप () को समझने में आसानी हुई।
शिमोन विज़सर

1
इसके अलावा, प्रारूप () क्या होता है, इसे व्यक्त करने के अधिक स्पष्ट तरीकों का समर्थन करता है, जैसे "{a} {b}"। प्रारूप (a = '3', b = '4')।
शिमोन विज़सर

240

आपको प्रारूप तर्क को टपल में जोड़ने की आवश्यकता है (कोष्ठक जोड़ें):

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl)

आपके पास वर्तमान में निम्नलिखित के बराबर है:

intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl

उदाहरण:

>>> "%s %s" % 'hello', 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> "%s %s" % ('hello', 'world')
'hello world'

3
यह काम किया। मैं किसी भी प्रकार की त्रुटि से बचने के लिए% s स्वरूपण का उपयोग करने की कोशिश कर रहा था, लेकिन मैं इसे अभी भी प्राप्त कर रहा हूं। संबंधित: stackoverflow.com/questions/1338690/…
y2k

ओपी के लिए उपयोगी नहीं होगा, उम्र को देखते हुए, लेकिन किसी के मामले में अभी भी उपयोगी है: एक साधारण समाधान जहां एक चर नहीं हो सकता है, उसके खिलाफ एक चौकसी बयान के साथ - यानी "% s% s"% ( अगर a कोई और नहीं है "", b) यदि हम संभवतः किसी के नहीं होने के बारे में चिंतित हैं। यहां तक ​​कि अगर कोई भी नहीं है, तो हम अभी भी प्रारूप ऑपरेटर को कोई नहीं दे रहे हैं और समस्याएं पैदा कर रहे हैं।
ब्लेयर

21

%मेरे प्रारूप स्ट्रिंग में प्रतिशत चरित्र के रूप में उपयोग करते समय मुझे वही त्रुटि मिली । इसका समाधान दोगुना करना है %%


4
आपके समाधान कैसे काम करता है, और इसके बिना कैसे विफल रहता है, आदि के कुछ कोड उदाहरण प्रदान करना उपयोगी हो सकता है। देखिए मैं एक अच्छा उत्तर कैसे लिखूं? । ध्यान दें कि यह एक 5 साल पुराना प्रश्न है, इसलिए आपको केवल एक उत्तर जोड़ना चाहिए, यदि यह पहले से मौजूद लोगों की तुलना में अधिक जानकारी प्रदान करता है।
रेमन

टाइपो के कारण मुझे इस त्रुटि का रूपांतर मिला:"foo: %(foo)s, bar: s(bar)% baz: %(baz)s" % {"foo": "FOO", "bar": "BAR", "baz": "BAZ"}
अकावल

Python3 के लिए यह "समाधान" गलत है -> अमान्य वाक्यविन्यास
JonyD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.