Подтвердить что ты не робот

Str.format() для Python 2.6 дает ошибку, когда 2.7 не

У меня есть код, который хорошо работает в 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.6, 2.7), я не вижу упоминания об изменениях между двумя версиями. Что здесь происходит?

4b9b3361

Ответ 1

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.

Ответ 2

Это в документах:
http://docs.python.org/2/library/string.html#format-string-syntax

Примерно через половину этого раздела:

Изменено в версии 2.7: Спецификаторы позиционного аргумента могут быть опущены, поэтому '{} {}' эквивалентно '{0} {1}'.