15

我有一些在 Python 2.7 中运行良好的代码。

Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import stdout
>>> foo = 'Bar'
>>> numb = 10
>>> stdout.write('{} {}\n'.format(numb, foo))
10 Bar
>>>

但在 2.6 中,我得到一个 ValueError 异常。

Python 2.6.8 (unknown, Jan 26 2013, 14:35:25) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import stdout
>>> foo = 'Bar'
>>> numb = 10
>>> stdout.write('{} {}\n'.format(numb, foo))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: zero length field name in format
>>>

在查看文档(2.62.7)时,我看不到两个版本之间已经进行了更改。这里发生了什么?

4

2 回答 2

28

Python 2.6 及之前的版本(以及 Python 3.0)要求您为占位符编号:

'{0} {1}\n'.format(numb, foo)

如果在 Python 2.7 和 Python 3.1 及更高版本中省略,编号是隐式的,请参阅文档

在 2.7 版更改:位置参数说明符可以省略,因此'{} {}'等效于'{0} {1}'.

隐式编号很流行;Stack Overflow 上的很多示例都使用它,因为这样更容易快速创建格式字符串。在处理仍必须支持 2.6 的项目时,我忘记了不止一次包含它们。

于 2013-10-29T20:28:01.657 回答
5

这是在此处的文档中:http:
//docs.python.org/2/library/string.html#format-string-syntax

该部分大约进行到一半:

在 2.7 版更改:位置参数说明符可以省略,因此'{} {}'等效于'{0} {1}'.

于 2013-10-29T20:28:04.900 回答