当我在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
属性。
我该如何解决这个问题?
答案 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)
答案 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及更高版本中的示例代码完全相同的输出。