প্রকারের ত্রুটি: স্ট্রিং ফর্ম্যাটিং পাইথনের সময় সমস্ত যুক্তি রূপান্তরিত হয় না


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

ত্রুটিটি আপনার স্ট্রিং বিন্যাসে রয়েছে।

'%' অপারেটরটি ব্যবহার করে traditionalতিহ্যবাহী স্ট্রিং ফর্ম্যাটিংয়ের সঠিক উপায়টি হ'ল একটি প্রিন্টফাইলে স্টাইল বিন্যাস স্ট্রিং ব্যবহার করা (এটির জন্য পাইথন ডকুমেন্টেশন এখানে: http://docs.python.org/2/library/string.html# formatt- স্ট্রিং-সিনট্যাক্স ):

"'%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
আমি সম্মতি জ্ঞাপন করি. % আরও সংক্ষিপ্ত এবং সরানো ভাষাতে কোনও উপকার যোগ করবে না।
শেভিডগ

@ লেনারহয়েট কীভাবে আপনি এফ স্ট্রিং সম্পর্কে অনুভূত হন? আমি এর "'%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,) অংশ হিসাবে আগ্রহের tuple সঙ্গে একটি সিঙ্গলটন টুপল করা এখানে মূল বিট।


আমি নীচের নীচের একটি বিবৃতি ব্যবহার করে print("this is a tuple: %s" % str(thetuple))print("this is a tuple: %s" % repr(thetuple))
টিপলটিকে

12

আমার ক্ষেত্রে, কারণ আমার কেবলমাত্র একটি একক প্রয়োজন %s, আমি মানগুলির ইনপুটটি অনুপস্থিত।


@ প্যারিসনকিটা কেজার, সুতরাং কীভাবে একক% s এর জন্য ইনপুট পরম পাবেন?
যতীন প্যাটেল - জেপি

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. যেমন নিন্নেও নির্দেশ করেছেন আপনি বিভিন্ন স্ট্রিং বিন্যাস পদ্ধতি মিশ্রিত করছেন।
  2. গাইপি দ্বারা নির্দেশিত হিসাবে আপনার ইন্ডেন্টেশনটিও বন্ধ রয়েছে।

আমি দুটি ফর্ম্যাট উদাহরণ প্রদান করেছি পাশাপাশি% s এর আর্গুমেন্ট স্পেসিফায়ারকে টিপলগুলি পাস করার জন্য। উভয় ক্ষেত্রেই ইন্ডেন্টেশন স্থির করা হয়েছে যখন দৈর্ঘ্যের সাথে মিল হয় তার চেয়ে চেকের চেয়ে বড় / কম ঠিক করা হয়েছে। এলিফের বিবৃতিগুলি পরবর্তীকালে পরিবর্তিত হয়েছে যাতে পূর্ববর্তী একই স্তরের বিবৃতিটি মিথ্যা হলে তারা কেবল চালিত হয়।

স্ট্রিং ফর্ম্যাট।। ফর্ম্যাট সহ

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 এবং একটি টিপল দিয়ে স্ট্রিং ফর্ম্যাট করা

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 

তবে তালিকা আরগগুলি ভাল কাজ করে।

আমি mysqlclient পাইথন lib ব্যবহার করি। লিব টিউপল আরোগুলি গ্রহণ না করার মতো দেখাচ্ছে। তালিকার পাসগুলি পাস করার মতো ['arg1', 'arg2'] কাজ করবে।


0

জাজো কাঁচা এসকিএল কোয়েরি দেখুন

"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 ব্যবহার করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.