35

当我在 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属性。

我该如何解决这个问题?

4

5 回答 5

48

str.format方法在 Python 3.0 中引入,并向后移植到 Python 2.6 及更高版本。

于 2009-04-27T09:04:05.003 回答
38

您的示例代码似乎是为 Python 2.6 或更高版本编写的,其中引入了该str.format方法

对于低于 2.6 的 Python 版本,使用% 运算符将一系列值插入到格式字符串中:

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'
于 2009-04-27T09:12:12.113 回答
8

我相信这是 Python 3.0 的一个特性,尽管它在 2.6 版中。但是,如果您有低于该版本的 Python,则该类型的字符串格式将不起作用。

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

print '%.2f' % some_var
于 2009-04-27T09:01:14.883 回答
7

你使用哪个 Python 版本?

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

如果要打印其他类型,请参见此处

于 2009-04-27T09:00:48.957 回答
7

尽管现有答案描述了原因并指出了修复的方向,但它们都没有真正提供解决问题的解决方案。

您有两种选择来解决问题。首先是升级到支持格式字符串构造的 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 及更高版本中产生的输出完全相同。

于 2010-02-04T17:16:01.010 回答