質問

I have some code which works well in 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
>>>

But in 2.6 I get a ValueError exception.

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
>>>

When looking through the documentation (2.6, 2.7), I can see no mention of changes having been done between the two versions. What is happening here?

役に立ちましたか?

解決

Python 2.6 and before (as well as Python 3.0) require that you number the placeholders:

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

The numbering, if omitted in Python 2.7 and Python 3.1 and up, is implicit, see the documentation:

Changed in version 2.7: The positional argument specifiers can be omitted, so '{} {}' is equivalent to '{0} {1}'.

The implicit numbering is popular; a lot of examples here on Stack Overflow use it as it is easier to whip up a quick format string that way. I have forgotten to include them more than once when working on projects that must support 2.6 still.

他のヒント

This is in the docs here:
http://docs.python.org/2/library/string.html#format-string-syntax

About halfway through that section:

Changed in version 2.7: The positional argument specifiers can be omitted, so '{} {}' is equivalent to '{0} {1}'.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top