当我在Python 2.5.2中运行以下代码时:
for x in range(1, 11):
print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
Run Code Online (Sandbox Code Playgroud)
我明白了:
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'
Run Code Online (Sandbox Code Playgroud)
我不明白这个问题.
从dir('hello')没有format属性.
我怎么解决这个问题?
big*_*ose 36
您的示例代码似乎是为Python 2.6或更高版本编写的,其中引入了该str.format方法.
对于2.6以下的Python版本,使用%运算符将值序列插入格式字符串:
for x in range(1, 11):
print '%2d %3d %4d' % (x, x*x, x*x*x)
Run Code Online (Sandbox Code Playgroud)
你也应该知道,该运营商可以通过插值的名字来自一个映射,而不仅仅是位置参数:
>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam", 'baz': None}
'spam 42'
Run Code Online (Sandbox Code Playgroud)
结合内置vars()函数将命名空间的属性作为映射返回的事实,这可以非常方便:
>>> bar = 42
>>> foo = "spam"
>>> baz = None
>>> "%(foo)s %(bar)d" % vars()
'spam 42'
Run Code Online (Sandbox Code Playgroud)
我相信这是一个Python 3.0功能,虽然它是2.6版本.但是如果你有一个Python版本,那么这种类型的字符串格式将不起作用.
如果您尝试一般打印格式化的字符串,请通过%运算符使用Python的printf样式语法.例如:
print '%.2f' % some_var
Run Code Online (Sandbox Code Playgroud)
虽然现有的答案描述了原因并指出了修复的方向,但它们实际上都没有提供解决方案来完成问题所要求的问题.
您有两种方法可以解决问题.第一种是升级到Python 2.6或更高版本,它支持格式字符串构造.
第二个选项是使用%运算符的旧字符串格式.您所呈现的等效代码如下.
for x in range(1,11):
print '%2d %3d %4d' % (x, x*x, x*x*x)
Run Code Online (Sandbox Code Playgroud)
这段代码剪切在Python 2.5中产生与Python 2.6及更高版本中的示例代码完全相同的输出.