পাইথন প্রকারের ত্রুটি: বিন্যাসের স্ট্রিংয়ের জন্য পর্যাপ্ত আর্গুমেন্ট নেই


137

এখানে আউটপুট। এগুলি আমার বিশ্বাস আটটি -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)

এটি আপনার হওয়া ত্রুটিটিও ঠিক করে।


এটি কি লগিং মডিউলটির জন্যও কাজ করে? এই ধরণের বিরক্তি এটি দ্বারা বোঝা যায়?
অল্ট্রেডস জ্যাক

@ জোশসভোস: হ্যাঁ, এখানে কয়েকটি লিঙ্ক উল্লেখ করা হয়েছে যা সম্ভাবনাগুলি নিয়ে আলোচনা করেছে: বাগস.পিথথন.আর
সাইমন

4
@ সাইমনভিজার, কেন এটি পুরানো হচ্ছে? আপনি যদি উদাহরণস্বরূপ ফর্ম্যাট স্ট্রিং সংরক্ষণ করতে একটি ভেরিয়েবল ব্যবহার করেন এবং আপনি একই ভেরিয়েবেলে প্রতিস্থাপিত মানগুলির সাথে স্ট্রিং রাখতে চান তবে আপনি ফরম্যাট_ স্ট্রিং% = ('ব্লে', 'ব্লা', 'ব্লে') সহ একটি ট্যাড বিট ক্লিনার কোড পান । এই সম্পর্কে কিছু দরকারী লিঙ্কটি বিস্তারিতভাবে বর্ণনা করতে বা নির্দেশ করতে আগ্রহী?
জাজুকা

.format () যুক্ত করা হয়েছিল কারণ এটি বেশ সাধারণ এবং এটির জন্য অপারেটরের প্রয়োজন হবে না। আপনার উদাহরণটি দুর্দান্ত তবে একজন নতুনকে ব্যাখ্যা করা কঠিন। A = a.format (1,2,3) স্বরলিপিটি আরও স্পষ্ট এবং বোঝা / শেখানো সহজ। আমার কোনও লিঙ্ক নেই তবে ফর্ম্যাটটি () বোঝার সহজতর কারণ এটিই মূল কারণ।
সাইমন ভিজার

1
এছাড়াও, ফর্ম্যাট () "{a} {b}" যেমন ফর্ম্যাট (এ = '3', বি = '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 যদি a অন্য কেউ নয় "", খ) যদি আমরা সম্ভবত কোনও না হওয়ার বিষয়ে চিন্তিত থাকে তবে। সুতরাং যদি কোনওটি না হয় তবে আমরা এখনও বিন্যাস অপারেটরের কাছে কোনওটিই পাস করিনা এবং সমস্যা তৈরি করছি।
ব্লেয়ার

21

%আমার ফর্ম্যাট স্ট্রিংয়ে শতাংশ অক্ষর হিসাবে ব্যবহার করার সময় আমি একই ত্রুটি পেয়েছি । এর সমাধানটি দ্বিগুণ করা %%


4
আপনার সমাধান কীভাবে কাজ করে এবং কীভাবে এটি ব্যর্থ হয় ইত্যাদি কয়েকটি কোড উদাহরণ সরবরাহ করা কার্যকর হতে পারে। আমি কিভাবে একটি ভাল উত্তর লিখতে হবে দেখুন ? । মনে রাখবেন যে এটি একটি 5 বছরের পুরানো প্রশ্ন, সুতরাং আপনার উত্তরটি কেবল তখনই যুক্ত করা উচিত যদি এটি ইতিমধ্যে সেখানে থাকা তুলনায় উল্লেখযোগ্যভাবে আরও বেশি তথ্য সরবরাহ করে।
রমন

"foo: %(foo)s, bar: s(bar)% baz: %(baz)s" % {"foo": "FOO", "bar": "BAR", "baz": "BAZ"}
টাইপের

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