characters - Str.format() para Python 2.6 da error donde 2.7 no
python string (2)
Tengo un código que funciona bien en 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
>>>
Pero en 2.6 recibo una excepción 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
>>>
Al mirar a través de la documentación ( 2.6 , 2.7 ), no puedo ver ninguna mención de los cambios que se han hecho entre las dos versiones. ¿Que está sucediendo aquí?
Esto está en los documentos aquí:
http://docs.python.org/2/library/string.html#format-string-syntax
Aproximadamente a la mitad de esa sección:
Modificado en la versión 2.7 : los especificadores de argumentos posicionales pueden omitirse, por lo que
''{} {}''
es equivalente a''{0} {1}''
.
Python 2.6 y anteriores (además de Python 3.0) requieren que numere los marcadores de posición:
''{0} {1}/n''.format(numb, foo)
La numeración, si se omite en Python 2.7 y Python 3.1 y posteriores, está implícita, consulte la documentación :
Modificado en la versión 2.7 : los especificadores de argumentos posicionales pueden omitirse, por lo que
''{} {}''
es equivalente a''{0} {1}''
.
La numeración implícita es popular; muchos ejemplos aquí en lo utilizan ya que es más fácil acelerar una cadena de formato rápido de esa manera. He olvidado incluirlos más de una vez cuando trabajo en proyectos que deben soportar 2.6 todavía.