Ответ 1
Метод str.format
был представленный в Python 3.0, и передан обратно на 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
.
Как я могу это решить?
Метод str.format
был представленный в Python 3.0, и передан обратно на Python 2.6 и более поздние версии.
Ваш примерный код, по-видимому, написан для 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'
Я считаю, что это функция Python 3.0, хотя она находится в версии 2.6. Но если у вас есть версия Python ниже, этот тип форматирования строк не будет работать.
Если вы пытаетесь напечатать форматированные строки в общем случае, используйте синтаксис типа Python в стиле %
. Например:
print '%.2f' % some_var
Какую версию Python вы используете?
Edit
Для Python 2.5 используйте "x = %s" % (x)
(для печати строк)
Если вы хотите печатать другие типы, см. здесь.
Несмотря на то, что существующие ответы описывают причины и указывают направление исправления, ни один из них фактически не обеспечивает решение, которое выполняет то, что задает вопрос.
У вас есть два варианта решения проблемы. Первым является переход на 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 и выше.