35 votes

Formatage des chaînes dans la version Python antérieure à 2.6

Lorsque j'exécute le code suivant dans Python 2.5.2:

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

J'obtiens:

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'

Je ne comprends pas le problème.

D' dir('hello') il n'y a pas d' format d'attribut.

Comment puis-je résoudre ce problème?

48voto

SilentGhost Points 79627

L' str.format méthode a été introduite en Python 3.0, et intégré à Python 2.6 et plus tard.

38voto

bignose Points 6573

Pour les versions de Python 2.6 ci-dessous, utilisez l' opérateur % pour interpoler une séquence de valeurs dans un format de chaîne de caractères:

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

Vous devriez aussi être conscient que cet opérateur peut interpoler par nom à partir d'une cartographie, au lieu de simplement les arguments de position:

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

En combinaison avec le fait que le haut-var() renvoie les attributs d'espace de noms est une cartographie, cela peut être très utile:

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

8voto

htw Points 10312

Je crois que c'est un Python 3.0 fonctionnalité, même si elle est dans la version 2.6. Mais si vous avez une version de Python ci-dessous que, ce type de mise en forme de chaîne ne fonctionnera pas.

Si vous essayez d'imprimer formaté chaînes en général, l'utilisation de Python printf-la syntaxe de style par le biais de l' % de l'opérateur. Par exemple:

print '%.2f' % some_var

7voto

Jason R. Coombs Points 11130

Bien que les questions / réponses décrire les causes et le point dans la direction d'un correctif, aucun d'eux ne fait de fournir une solution qui accomplit ce que la question demande.

Vous avez deux options pour résoudre le problème. La première est de mettre à niveau vers la version 2.6 de Python ou plus, qui prend en charge le format de la chaîne de construction.

La deuxième option est d'utiliser le plus âgé de la chaîne de mise en forme avec l'opérateur % . Le code équivalent de ce que vous avez présenté serait comme suit.

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

Ce code ciselée produit exactement le même résultat dans Python 2.5 comme votre exemple de code produit en Python 2.6 et supérieur.

7voto

Loïc Wolff Points 1216

Qui version de Python que vous utilisez?

Modifier Pour Python 2.5, utilisez "x = %s" % (x) (pour l'impression de chaînes de caractères)

Si vous souhaitez imprimer d'autres types, voir ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X