Форматирование строк в версии Python ранее 2.6 - PullRequest
34 голосов
/ 27 апреля 2009

Когда я запускаю следующий код в Python 2.5.2:

for x in range(1, 11):
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)

Я получаю:

Traceback (most recent call last):
  File "<pyshell#9>", line 2, in <module>
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
AttributeError: 'str' object has no attribute 'format'

Я не понимаю проблемы.

С dir('hello') отсутствует атрибут format.

Как я могу решить это?

Ответы [ 5 ]

47 голосов
/ 27 апреля 2009

Метод str.format был введен в Python 3.0 и перенесен на Python 2.6 и более поздние версии.

36 голосов
/ 27 апреля 2009

Ваш пример кода написан для Python 2.6 или новее, где был введен метод str.format .

Для версий Python ниже 2.6, используйте оператор% , чтобы интерполировать последовательность значений в строку формата:

for x in range(1, 11):
    print '%2d %3d %4d' % (x, x*x, x*x*x)

Вы также должны знать, что этот оператор может интерполировать по имя из сопоставления, а не только позиционные аргументы:

>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam", 'baz': None}
'spam 42'

В сочетании с тем фактом, что встроенная функция vars () возвращает атрибуты пространства имен в качестве отображения, это может быть очень удобно:

>>> bar = 42
>>> foo = "spam"
>>> baz = None
>>> "%(foo)s %(bar)d" % vars()
'spam 42'
8 голосов
/ 27 апреля 2009

Я считаю, что это особенность Python 3.0, хотя она есть в версии 2.6. Но если у вас версия Python ниже этой, форматирование строк не будет работать.

Если вы пытаетесь распечатать отформатированные строки в целом, используйте синтаксис Python в стиле printf через оператор %. Например:

print '%.2f' % some_var
7 голосов
/ 04 февраля 2010

Несмотря на то, что существующие ответы описывают причины и указывают на направление исправления, ни один из них на самом деле не обеспечивает решение, которое выполняет то, что задает вопрос. У вас есть два варианта решения проблемы. Первый - это обновление до Python 2.6 или выше, который поддерживает строковую конструкцию формата .

Второй вариант - использовать более старое форматирование строки с оператором% . Эквивалентный код того, что вы представили, будет выглядеть следующим образом.

for x in range(1,11):
  print '%2d %3d %4d' % (x, x*x, x*x*x)

Этот фрагмент кода производит точно такой же вывод в Python 2.5, как и ваш пример кода в Python 2.6 и выше.

7 голосов
/ 27 апреля 2009

Какую версию Python вы используете?

Редактировать Для Python 2.5 используйте "x = %s" % (x) (для печати строк)

Если вы хотите напечатать другие типы, см. Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...