无法弄清楚String替换在Python 3.x中是如何工作的

时间:2013-02-11 15:36:57

标签: python python-3.x format string-substitution

在python 2.x中你被允许做这样的事情:

>>> print '%.2f' % 315.15321531321
315.15

然而,我无法让它为python 3.x工作,我尝试了不同的东西,比如

>>> print ('%.2f') % 315.15321531321
%.2f
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'NoneType' and 'float'

>>> print ("my number %") % 315.15321531321
my number %
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'NoneType' and 'float'

然后,我读到了.format()方法,但我无法使其工作

>>> "my number {.2f}".format(315.15321531321)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute '2f'

>>> print ("my number {}").format(315.15321531321)
my number {}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'format'

我会对任何提示和建议感到高兴!

2 个答案:

答案 0 :(得分:4)

尝试发送带有格式的整个字符串进行打印。

print ('%.2f' % 6.42340)

适用于Python 3.2

此外,格式的工作原理是为所提供的agruments提供索引

print( "hello{0:.3f}".format( 3.43234 ))

注意格式标志前面的'0'。

答案 1 :(得分:2)

您的代码存在的问题是,在Python 3中,print不再是关键字,而是一个函数,所以会发生这种情况:

>>> print ('%.2f') % 315.15321531321
%.2f
Traceback....  # 

因为它打印字符串后来评估“%315.15321531321”部分,当然也失败了,其他例子也是如此。

没关系:

print(('%.2f') % 315.15321531321)