36 Stimmen

String-Formatierung in Python-Versionen vor 2.6

Wenn ich den folgenden Code in Python 2.5.2:

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

Ich verstehe:

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'

Ich verstehe das Problem nicht.

Von dir('hello') Es gibt keine format Attribut.

Wie kann ich das Problem lösen?

48voto

SilentGhost Punkte 285785

El str.format Methode war eingeführt in Python 3.0, und zurückportiert auf Python 2.6 und höher.

38voto

bignose Punkte 27108

Ihr Beispielcode scheint für Python 2.6 oder höher geschrieben zu sein, wo le site str.format Methode wurde eingeführt .

Für Python-Versionen unter 2.6, verwenden Sie der %-Operator um eine Folge von Werten in eine Formatzeichenfolge zu interpolieren:

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

Sie sollten sich auch bewusst sein, dass dieser Operator interpolieren kann durch Name aus einem Mapping, statt nur aus Positionsargumenten:

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

In Kombination mit der Tatsache, dass die eingebaute Funktion vars() Attribute eines Namespaces als Mapping zurückgibt, kann dies sehr praktisch sein:

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

5 Stimmen

Das ist eine gute Beschreibung, aber sie beschreibt nicht, wie man die Formatierung in dem vorgestellten Beispiel umsetzt.

0 Stimmen

@JasonR.Coombs: Danke, ich habe den Code, der dem vorgestellten Beispiel entspricht, jetzt als erstes in der Antwort.

8voto

hbw Punkte 15232

Ich glaube, das ist eine Funktion von Python 3.0, obwohl sie in Version 2.6 enthalten ist. Aber wenn Sie eine Python-Version darunter haben, wird diese Art der String-Formatierung nicht funktionieren.

Wenn Sie versuchen, formatierte Zeichenketten im Allgemeinen zu drucken, verwenden Sie Pythons printf-ähnliche Syntax über die % Betreiber. Zum Beispiel:

print '%.2f' % some_var

7voto

Loïc Wolff Punkte 2899

Welche Python-Version verwenden Sie?

bearbeiten Für Python 2.5, verwenden Sie "x = %s" % (x) (zum Drucken von Zeichenketten)

Wenn Sie andere Typen drucken möchten, siehe hier .

7voto

Jason R. Coombs Punkte 38667

Obwohl die vorhandenen Antworten die Ursachen beschreiben und in die Richtung einer Lösung weisen, bietet keine von ihnen tatsächlich eine Lösung, die die gestellte Frage erfüllt.

Sie haben zwei Möglichkeiten, das Problem zu lösen. Die erste ist ein Upgrade auf Python 2.6 oder höher, das die Formatzeichenkonstruktion .

Die zweite Möglichkeit ist die Verwendung der ältere String-Formatierung mit dem %-Operator . Der äquivalente Code dessen, was Sie dargestellt haben, wäre wie folgt.

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

Dieser Codeausschnitt erzeugt in Python 2.5 genau die gleiche Ausgabe wie Ihr Beispielcode in Python 2.6 und höher.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X