Formato de cadena en la versión de Python anterior a 2.6

Cuando ejecuto el siguiente código en Python 2.5.2:

for x in range(1, 11): print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x) 

Yo obtengo:

 Traceback (most recent call last): File "", line 2, in  print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x) AttributeError: 'str' object has no attribute 'format' 

No entiendo el problema.

Desde dir('hello') no hay ningún atributo de format .

¿Como puedo resolver esto?

El método str.format se introdujo en Python 3.0 y se devolvió a Python 2.6 y str.format posteriores.

Su código de ejemplo parece estar escrito para Python 2.6 o posterior, donde se introdujo el método str.format .

Para versiones de Python por debajo de 2.6, use el operador% para interpolar una secuencia de valores en una cadena de formato:

 for x in range(1, 11): print '%2d %3d %4d' % (x, x*x, x*x*x) 

También debe tener en cuenta que este operador puede interpolar por nombre desde una asignación, en lugar de solo argumentos posicionales:

 >>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam", 'baz': None} 'spam 42' 

En combinación con el hecho de que la función vars () incorporada devuelve atributos de un espacio de nombres como una asignación, esto puede ser muy útil:

 >>> bar = 42 >>> foo = "spam" >>> baz = None >>> "%(foo)s %(bar)d" % vars() 'spam 42' 

Creo que es una característica de Python 3.0, aunque está en la versión 2.6. Pero si tienes una versión de Python debajo de eso, ese tipo de formato de cadena no funcionará.

Si está intentando imprimir cadenas formateadas en general, use la syntax del estilo printf de Python a través del operador % . Por ejemplo:

 print '%.2f' % some_var 

¿Qué versión de Python usas?

Editar Para Python 2.5, use "x = %s" % (x) (para imprimir cadenas)

Si desea imprimir otros tipos, vea aquí .

Aunque las respuestas existentes describen las causas y apuntan en la dirección de una solución, ninguna de ellas en realidad proporciona una solución que cumpla con lo que la pregunta plantea.

Tienes dos opciones para resolver el problema. El primero es actualizar a Python 2.6 o superior, que admite la construcción de cadena de formato .

La segunda opción es usar el formato de cadena anterior con el operador% . El código equivalente de lo que has presentado sería el siguiente.

 for x in range(1,11): print '%2d %3d %4d' % (x, x*x, x*x*x) 

Este código cortado produce exactamente la misma salida en Python 2.5 que su código de ejemplo produce en Python 2.6 y superior.