TypeError: स्ट्रिंग स्वरूपण अजगर के दौरान परिवर्तित सभी तर्क नहीं


192

कार्यक्रम को दो नामों में लेना चाहिए, और यदि वे एक ही लंबाई के हैं तो यह जांचना चाहिए कि क्या वे एक ही शब्द हैं। यदि यह एक ही शब्द है तो यह "नाम समान हैं" मुद्रित करेगा । यदि वे एक ही लंबाई के हैं, लेकिन विभिन्न अक्षरों के साथ यह "नाम अलग हैं लेकिन समान लंबाई हैं" मुद्रित होंगे । मुझे जिस भाग में समस्या हो रही है वह नीचे की 4 लाइनों में है।

#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
    if name1 == name2:
        print ("The names are the same")
    else:
        print ("The names are different, but are the same length")
    if len(name1) > len(name2):
        print ("'{0}' is longer than '{1}'"% name1, name2)
    elif len(name1) < len(name2):
        print ("'{0}'is longer than '{1}'"% name2, name1)

जब मैं यह कोड दिखाता हूं तो यह प्रदर्शित होता है:

Traceback (most recent call last):
  File "program.py", line 13, in <module>
    print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting

किसी भी सुझाव बहुत सराहना की है।

जवाबों:


210

आप विभिन्न प्रारूप कार्यों को मिला रहे हैं।

पुरानी शैली की %फ़ॉर्मेटिंग, फ़ॉर्मेटिंग के लिए %कोड का उपयोग करती है :

'It will cost $%d dollars.' % 95

नई शैली का {}स्वरूपण {}कोड और .formatविधि का उपयोग करता है

'It will cost ${0} dollars.'.format(95)

ध्यान दें कि पुराने शैली के प्रारूपण के साथ, आपको एक टपल का उपयोग करके कई तर्क निर्दिष्ट करने होंगे:

'%d days and %d nights' % (40, 40)

आपके मामले में, जब से आप {}प्रारूप विनिर्देशक का उपयोग कर रहे हैं , उपयोग करें .format:

"'{0}' is longer than '{1}'".format(name1, name2)

17
अजगर में 3.6:f"'It will cost ${your_variable} dollars."
जिनसो

51

त्रुटि आपके स्ट्रिंग स्वरूपण में है।

'%' ऑपरेटर का उपयोग करके पारंपरिक स्ट्रिंग फॉर्मेटिंग का उपयोग करने का सही तरीका प्रिंट-स्टाइल प्रारूप स्ट्रिंग (यहां इसके लिए पायथन प्रलेखन) का उपयोग करना है: http://docs.python.org/2/library/string.html#format- स्ट्रिंग-सिंटैक्स ):

"'%s' is longer than '%s'" % (name1, name2)

हालांकि, '%' ऑपरेटर भविष्य में संभवतः पदावनत हो जाएगा । चीजों को करने का नया पीईपी 3101 तरीका इस प्रकार है:

"'{0}' is longer than '{1}'".format(name1, name2)

9
scnr: "शायद भविष्य में पदावनत हो जाएगा" ऐसा अब तक नहीं हुआ (पायथन 3.5)। पुराने '%' सिंटैक्स को 3.1 में नहीं चित्रित किया गया था और केवल 3.2 लॉगिंग मॉड्यूल में सीखा गया कि नई शैली के साथ कैसे प्रारूपित किया जाए{} । और अचानक 3.5 पीईपी 461% लाता है : बाइट्स के लिए स्वरूपण । इससे मुझे लगता है कि %आने वाले लंबे समय के लिए अवशेष।
सीएफआई

7
%अधिक संक्षिप्त है। खुशी है कि यह हमारे साथ रहता है।
लेनार होयट

3
मैं सहमत हूँ। % अधिक संक्षिप्त है और हटाने से भाषा को कोई लाभ नहीं होगा।
chevydog

@LenarHoyt आप एफ-स्ट्रिंग्स के बारे में कैसा महसूस करते हैं? मैं कल्पना नहीं कर सकता कि इससे "'%s' is longer than '%s'" % (name1, name2)अधिक संक्षिप्त हैf"'{name1}' is longer than '{name2}'"
मार्क मोरेटो

44

मेरे लिए, यह त्रुटि तब हुई जब मैं एक टुपल को स्ट्रिंग प्रारूप विधि में पारित करने का प्रयास कर रहा था।

मुझे इस प्रश्न / उत्तर से समाधान मिला

लिंक से सही उत्तर की प्रतिलिपि बनाना और चिपकाना (मेरे काम नहीं) :

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

एकमात्र आइटम के रूप में रुचि के टपल के साथ एक सिंगलटन टपल बनाना, यानी (thetuple) हिस्सा है, यहां कुंजी बिट है।


मैं इसके बजाय निम्नलिखित कथनों में से एक का उपयोग करके टपल को एक स्ट्रिंग में परिवर्तित करूंगा: print("this is a tuple: %s" % str(thetuple))याprint("this is a tuple: %s" % repr(thetuple))
एलेक्सग

12

मेरे मामले में, ऐसा इसलिए है क्योंकि मुझे केवल एकल %s, आई मिसिंग वैल्यू इनपुट की आवश्यकता है।


@ParisNakitaKejser, तो सिंगल% s के लिए इनपुट परम कैसे प्राप्त करें?
जतिन पटेल - JP

6

अन्य दो उत्तरों के अलावा, मुझे लगता है कि पिछली दो स्थितियों में इंडेंटेशन भी गलत हैं। स्थितियां यह हैं कि एक नाम दूसरे की तुलना में लंबा है और उन्हें 'एलिफ' के साथ और बिना किसी इंडेंटेशन के साथ शुरू करने की आवश्यकता है। यदि आप इसे पहली शर्त के भीतर रखते हैं (इसे मार्जिन से चार इंडेंटेशन देकर), यह विरोधाभासी होने के कारण समाप्त होता है क्योंकि नामों की लंबाई एक ही समय में समान और भिन्न नहीं हो सकती है।

    else:
        print ("The names are different, but are the same length")
elif len(name1) > len(name2):
    print ("{0} is longer than {1}".format(name1, name2))

3

कुछ अन्य उत्तरों में इंगित किए गए मुद्दों का एक संयोजन है।

  1. जैसा कि nneonneo द्वारा बताया गया है कि आप अलग-अलग String Formatting Methods को मिला रहे हैं।
  2. गाइप द्वारा बताया गया है कि आपका इंडेंटेशन भी बंद है।

मैंने% s के तर्क निर्दिष्ट करने के लिए ट्यूल को पास करने के साथ-साथ .format का भी उदाहरण दिया है। दोनों मामलों में इंडेंटेशन को इतना अधिक तय किया गया है / लंबाई की तुलना में चेक कम है। बाद में भी बदल गया अगर एलीफ के बयान तो वे केवल चलाते हैं यदि पूर्व समान स्तर का बयान गलत था।

स्ट्रिंग स्वरूपण .format के साथ

name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
    if name1 == name2:
        print ("The names are the same")
    else:
        print ("The names are different, but are the same length")
elif len(name1) > len(name2):
    print ("{0} is longer than {1}".format(name1, name2))
elif len(name1) < len(name2):
    print ("{0} is longer than {1}".format(name2, name1))

स्ट्रिंग स्वरूपण% s और एक tuple के साथ

name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
    if name1 == name2:
        print ("The names are the same")
    else:
        print ("The names are different, but are the same length")
elif len(name1) > len(name2):
    print ("%s is longer than %s" % (name1, name2))
elif len(name1) < len(name2):
    print ("%s is longer than %s" % (name2, name1))

2

अजगर 3.7 और इसके बाद के संस्करण में एक नया और आसान तरीका है। यहाँ वाक्यविन्यास है:

name = "Eric"
age = 74
f"Hello, {name}. You are {age}."

आउटपुट:

Hello, Eric. You are 74.

1

मेरे लिए, जैसा कि मैं एक ही प्रिंट कॉल के भीतर कई मानों को संग्रहीत कर रहा था, समाधान एक टुपल के रूप में डेटा को संग्रहीत करने के लिए एक अलग चर बनाने के लिए था और फिर प्रिंट फ़ंक्शन को कॉल करें।

x = (f"{id}", f"{name}", f"{age}")
print(x) 

0

मैं भी त्रुटि का सामना,

_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting 

लेकिन सूची args अच्छी तरह से काम करते हैं।

मैं mysqlclient python lib का उपयोग करता हूं। ऐसा लग रहा है कि टपल को स्वीकार नहीं किया गया है। सूची पास करने के लिए जैसे ['arg1', 'arg2'] काम करेंगे।


0

देखने में django कच्चा sql क्वेरी

"SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to)

models.py

class VehicleDamage(models.Model):
    requestdate = models.DateTimeField("requestdate")
    vendor_name = models.CharField("vendor_name", max_length=50)
    class Meta:
        managed=False

views.py

def location_damageReports(request):
    #static date for testing
    date_from = '2019-11-01'
    date_to = '2019-21-01'
    vehicle_damage_reports = VehicleDamage.objects.raw("SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to))
    damage_report = DashboardDamageReportSerializer(vehicle_damage_reports, many=True)
    data={"data": damage_report.data}
    return HttpResponse(json.dumps(data), content_type="application/json")

नोट: अजगर 3.5 और django 1.11 का उपयोग कर

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