Python版本早于2.6的字符串格式

时间:2009-04-27 08:57:15

标签: python format

当我在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 个答案:

答案 0 :(得分:47)

{2.6}及更高版本的str.format方法为introduced in Python 3.0, and backported

答案 1 :(得分:36)

您的示例代码似乎是为Python 2.6或更高版本编写的,其中the str.format method was introduced

对于2.6以下的Python版本,使用the % operator将一系列值插入格式字符串:

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

您还应该知道,此运算符可以通过映射中的 name 进行插值,而不仅仅是位置参数:

>>> "%(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'

答案 2 :(得分:8)

我相信这是一个Python 3.0功能,虽然它在2.6版本中。但是如果你有一个Python版本,那么这种类型的字符串格式将不起作用。

如果您尝试一般打印格式化字符串,请通过%运算符使用Python的printf样式语法。例如:

print '%.2f' % some_var

答案 3 :(得分:7)

您使用的是哪个Python版本?

修改 对于Python 2.5,使用"x = %s" % (x)(用于打印字符串)

如果您想要打印其他类型,see here

答案 4 :(得分:7)

虽然现有的答案描述了原因并指出了修复的方向,但它们实际上都没有提供解决问题的解决方案。

您有两种方法可以解决问题。第一种是升级到Python 2.6或更高版本,它支持format string construct

第二个选项是使用older string formatting with the % operator。您所呈现的等效代码如下:

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

这段代码在Python 2.5中产生与Python 2.6及更高版本中的示例代码完全相同的输出。