Error "ValueError: nombre de campo de longitud cero en formato" en Python 3.0,3.1,3.2

120

Estoy tratando de aprender Python (3 para ser más específico) y obtengo este error:

ValueError: zero length field name in format

Lo busqué en Google y descubrí que necesitas especificar los números:

a, b = 0, 1
if a < b:
     print('a ({0}) is less than b ({1})'.format(a, b))
else:
     print('a ({0}) is not less than b ({1})'.format(a, b))

Y no como el tutorial (de lynda.com) realmente dice:

a, b = 0, 1
if a < b:
     print('a ({}) is less than b ({})'.format(a, b))
else:
     print('a ({}) is not less than b ({})'.format(a, b))

El tutorial que sigo tiene Python 3.1, y estoy usando 3.2 y lo que leí sobre este error es que esto solo sucede en <3.1 (3.0). ¿Deshacieron esto en 3.2 o estoy haciendo algo mal?

Además, habla despacio;) esta es literalmente mi primera noche aprendiendo Python y solo el segundo "script" que he escrito en Python.

Oscar Ahijado
fuente
1
Intente agregar esto: import sys; print (sys.version), solo para asegurarte de que no estás llamando accidentalmente a otra versión de Python
Winston Ewert

Respuestas:

131

Supongo que está ejecutando Python 2.6 por accidente de alguna manera.

Esta función solo está disponible para al menos 3.1 si está usando Python 3, o 2.7 si está usando Python 2.

Winston Ewert
fuente
3
¡Gracias! ¡eso fue todo! Tuve que cambiar mis shebangs a: #! /usr/local/bin/python3después de mirar por todos lados. Hay 3 ubicaciones diferentes de instalaciones de Python en Mac -_- wtf.
Oscar Godson
4
Esto es parcialmente correcto: el código de OP funcionaría si fuera Python 2.7, pero no 2.6. (Ver la respuesta de @Dennis Williamson).
mayhewsw
Tengo este problema con Python 3.0.1 en Windows. (Definitivamente dice 3.0.1 en la primera línea después de iniciar Python cmdline)
inger
@inger, necesitas Python 3.1 para usarlo.
Winston Ewert
hmm, gracias por la respuesta rápida ... sin embargo, las respuestas a continuación dicen "2.7 y posterior" - ¿Entonces 3.0.1 fue anterior? Además, el OP preguntó sobre el problema en 3.0 (+ otros), a lo que su respuesta es "está ejecutando 2.6", lo que sugeriría que 3.0 en sí mismo está bien. Sería bueno si pudiera actualizar la respuesta. Gracias
inger
148

Python 2.6 y 3.0 requieren los números de campo. En Python 2.7 y posteriores y 3.1 y posteriores, se pueden omitir.

Modificado en la versión 2.7: los especificadores de argumentos posicionales se pueden omitir, por lo que '{} {}' es equivalente a '{0} {1}'.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |
Pausado hasta nuevo aviso.
fuente
2
¡La diferencia de versión me subió hoy! Gracias por el puntero.
Richard Clayton
@Dennis: voté por su respuesta porque mostró cómo abordar el problema en versiones anteriores de Python, especificando el número de campo. Sin embargo, decir "Python 2.7 y posterior" me parece engañoso porque de acuerdo con otras respuestas aquí, los números de campo son obligatorios en Python 3.0. Winston señala en el último comentario sobre su respuesta que 2.7 salió después de 3.0, por lo que su declaración puede ser cronológicamente correcta, pero la mayoría de nosotros lo leería como una indicación de que las llaves vacías deberían funcionar en 3.0.
Tom Barron
@TomBarron: Las llaves vacías funcionan para mí:, python3.4 -c 'print("|{}|{}|".format(3,4))'pero aparentemente 3.0 no lo tiene (3.1 y posteriores sí). Aclararé mi respuesta.
Pausado hasta nuevo aviso.
2

Si está utilizando Eclipse, debería buscar en Ventana -> Preferencias -> PyDev -> Intérprete - Python. Allí tienes una lista de intérpretes (con nombre y ubicación). Si para su proyecto actual está utilizando un intérprete que se encuentra, por ejemplo, en / usr / bin / python, probablemente ejecute / usr / bin / python -V le dará algo como "Python 2.6.6". Y ahí está tu respuesta, como escribió Winston Ewert.

(puede agregar un nuevo interperter simplemente haciendo clic en el botón "Nuevo ..." y dando / usr / bin / python3 como "ubicación". Entonces probablemente tenga que cambiar la configuración de su proyecto (Preferencias -> PyDev - Intérprete / Gramática).

ilektrik
fuente