Подтвердить что ты не робот

Форматирование строк в версии Python раньше 2.6

Когда я запускаю следующий код в 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.

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

4b9b3361

Ответ 2

Ваш примерный код, по-видимому, написан для 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'

Ответ 3

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

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

print '%.2f' % some_var

Ответ 4

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

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

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

Ответ 5

Несмотря на то, что существующие ответы описывают причины и указывают направление исправления, ни один из них фактически не обеспечивает решение, которое выполняет то, что задает вопрос.

У вас есть два варианта решения проблемы. Первым является переход на 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 и выше.