Python не все аргументы, преобразованные во время форматирования строки

KMarto спросил: 12 мая 2018 в 04:17 в: python-3.x

У меня есть следующий код python

table += '<tr><td>{0}</td><td>{1}</td></tr>'% format(str(key)), 
format(str(value))
TypeError: not all arguments converted during string formatting

В чем может быть проблема?

2 ответа

Есть решение
Martijn Pieters ответил: 12 мая 2018 в 05:00

Вы смешиваете три разных метода преобразования значений в строки. Чтобы использовать заполнители {..}, используйте метод str.format() , непосредственно в строковом литерале, который является шаблоном:

table += '<tr><td>{0}</td><td>{1}</td></tr>'.format(key, value)

Нет необходимости использовать функции str() или format(), и вам не нужно использовать %.

  • Функция format() превращает объекты в строку, используя мини-язык спецификации формата , тот же язык, который позволяет отформатировать значения в str.format() placeholder. Это часть форматирования языка шаблона, доступная как отдельная функция.

  • str() превращает объект в строку без специальное форматирование. Вы всегда получите тот же результат. Поскольку str.format() уже преобразовывает объекты в строки (но с элементами управления форматированием ), вам не нужно использовать это. И если вам это нужно в любом случае (потому что, скажем, вы хотите применить элементы управления форматированием string , а не те, которые принадлежат другому типу объекта), str.format() имеет !s конверсии.

  • Применение % к строковому объекту дает вам другую операцию форматирования строк, называемую форматированием printf. Этот метод гораздо менее гибкий, чем версия str.format().

Если вы используете Python 3.6 или новее, я рекомендую использовать более быстрое форматирование f-string строковые литералы:

table += f'<tr><td>{key}</td><td>{value}</td></tr>'
Tudor Plugaru ответил: 12 мая 2018 в 04:20

Вы должны вызвать метод .format в строке. Точно так же:

table += '<tr><td>{key}</td><td>{value}</td></tr>'.format(key=str(key), value=str(value))