thousands number multiple float examples characters python format

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



python format repeat string (5)

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 "<pyshell#9>", line 2, in <module> 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 atributo de format .

¿Como puedo resolver esto?


¿Qué versión de Python usas?

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

Si quieres imprimir otros tipos, mira aquí .


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

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

print ''%.2f'' % some_var


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

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

La segunda opción es usar el formato de cadena más antiguo 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 recortado produce exactamente la misma salida en Python 2.5 que su código de ejemplo produce en Python 2.6 y posteriores.



Para las 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 un mapeo, 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 incorporada vars () devuelve los 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''