我有一些代码可以在Python2.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)时,我看不到两个版本之间所做的更改。这里发生了什么?

最佳答案

python 2.6及之前版本(以及python 3.0)要求对占位符编号:

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

如果在python 2.7和python 3.1及更高版本中省略了编号,则该编号是隐式的,请参见documentation
在版本2.7中进行了更改:位置参数说明符可以省略,因此'{} {}'相当于'{0} {1}'
隐式编号很流行;这里有很多关于堆栈溢出的例子使用它,因为这样更容易快速生成格式字符串。在处理必须支持2.6的项目时,我忘记了多次将它们包括在内。

08-16 17:24