Python 2.6之前版本中的字符串格式
在Python 2.5.2中运行以下代码时:Python 2.6之前版本中的字符串格式,python,format,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)
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'
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
打印“{0:2d}{1:3d}{2:4d}”。格式(x,x*x,x*x*x)
AttributeError:“str”对象没有属性“format”
我不明白这个问题
从dir('hello')
没有format
属性
如何解决这个问题?您使用哪种Python版本 编辑 对于Python2.5,使用
“x=%s”%(x)
(用于打印字符串)
如果您想打印其他类型,我认为这是Python 3.0的一个特性,尽管它在2.6版中。但是,如果您的Python版本低于此版本,那么这种类型的字符串格式将不起作用 如果您试图打印格式化字符串,请通过
%
操作符使用Python的printf样式语法。例如:
print '%.2f' % some_var
str.format
方法适用于Python2.6及更高版本。您的示例代码似乎是为Python2.6或更高版本编写的,其中
对于低于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'
尽管现有的答案描述了原因并指出了解决问题的方向,但实际上没有一个答案能够解决问题
你有两个选择来解决这个问题。首先是升级到Python2.6或更高版本,它支持
第二种选择是使用。您所展示内容的等效代码如下所示
for x in range(1,11):
print '%2d %3d %4d' % (x, x*x, x*x*x)
此代码在Python 2.5中生成的输出与您的示例代码在Python 2.6及更高版本中生成的输出完全相同。这是一个很好的描述,但它没有描述如何在所示示例中实现格式。@JasonR.Coombs:谢谢,我现在将与所示示例对应的代码作为答案中的第一个代码。