Вопрос по format, string, typeerror, python – Python TypeError: недостаточно аргументов для строки формата

111

Вот результат. Я полагаю, что это строки utf-8 ... некоторые из них могут быть NoneType, но они сразу же перестают работать, прежде чем такие ...

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

Ошибка типа: недостаточно аргументов для строки формата

Его 7 на 7, хотя?

Ваш Ответ

3   ответа
143

% синтаксис для форматирования строк становится устаревшим. Если ваша версия Python поддерживает это, вы должны написать:

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

Это также исправляет ошибку, которая у вас случилась.

Это работает и для модуля логирования? Под этим понимается такая интерполяция?
@ F.J: Да, вы правы - я обновил ответ :)
Это похоже на смешивание% форматирование иstr.format()Разве это не должно быть с использованием фигурных скобок в строке формата?
Кроме того, format () поддерживает более явные способы выражения того, что происходит, например "{a} {b}" .format (a = "3", b = "4").
@SimeonVisser, почему это устаревает? Если вы, например, используете одну переменную для хранения строки формата и хотите поместить строку с замененными значениями в одну и ту же переменную, вы получите чуть более чистый код сformat_string %= ('bla', 'bla', 'bla'), Хотите уточнить или указать какую-нибудь полезную ссылку по этому поводу?
203

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'
Это сработало ... вроде. Я пытался использовать% s форматирование, чтобы избежать ошибки NoneType, но я получаю его до сих пор. Связанные с:stackoverflow.com/questions/1338690/… y2k
6

в моей строке формата. Решением этой проблемы является удвоение %%.

Предоставление некоторых примеров кода того, как работает ваше решение и как оно терпит неудачу без него и т. Д., Может быть полезным. УвидетьHow do I write a good answer?, Обратите внимание, что это 5-летний вопрос, поэтому вы должны добавлять ответ, только если он предоставляет значительно больше информации, чем те, которые уже есть.
Я получил вариант этой ошибки из-за опечатки:"foo: %(foo)s, bar: s(bar)% baz: %(baz)s" % {"foo": "FOO", "bar": "BAR", "baz": "BAZ"}

Похожие вопросы