Fehler "ValueError: Feldname mit der Länge Null im Format" in Python 3.0,3.1,3.2

120

Ich versuche Python zu lernen (3 um genauer zu sein) und erhalte folgende Fehlermeldung:

ValueError: zero length field name in format

Ich habe es gegoogelt und herausgefunden, dass Sie die Zahlen angeben müssen:

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))

Und nicht wie das Tutorial (von lynda.com) tatsächlich sagt:

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))

Das Tutorial im folgenden hat Python 3.1 und ich benutze 3.2 und was ich über diesen Fehler gelesen habe ist, dass dies nur in <3.1 (3.0) passiert. Haben sie dies in 3.2 rückgängig gemacht oder mache ich etwas falsch?

Sprich auch langsam;) Dies ist buchstäblich meine erste Nacht, in der ich Python lerne, und nur das zweite "Skript", das ich in Python geschrieben habe.

Oscar Patensohn
quelle
1
Versuchen Sie Folgendes hinzuzufügen: import sys; print (sys.version), nur um sicherzustellen, dass Sie nicht versehentlich eine andere Version von Python aufrufen
Winston Ewert

Antworten:

131

Ich gehe davon aus, dass Sie Python 2.6 aus Versehen ausführen.

Diese Funktion ist nur für mindestens 3.1 verfügbar, wenn Sie Python 3 verwenden, oder für 2.7, wenn Sie Python 2 verwenden.

Winston Ewert
quelle
3
Vielen Dank! Das war's! Musste meinen Schebangs ändern zu: #! /usr/local/bin/python3nachdem ich alles durchgesehen habe . Es gibt 3 verschiedene Speicherorte für Python-Installationen auf dem Mac -_- wtf.
Oscar Godson
4
Dies ist teilweise richtig: Der Code von OP würde funktionieren, wenn es Python 2.7 wäre, aber nicht 2.6. (Siehe die Antwort von @Dennis Williamson).
Mayhewsw
Ich bekomme dieses Problem mit Python 3.0.1 unter Windows. (Es steht definitiv 3.0.1 in der ersten Zeile nach dem Start von Python cmdline)
inger
@inger, du brauchst Python 3.1, um es zu benutzen.
Winston Ewert
hmm, danke für die schnelle Antwort. In den folgenden Antworten steht jedoch "2.7 und höher" - also war 3.0.1 früher? Außerdem fragte das OP nach dem Problem in 3.0 (+ andere) - auf das Ihre Antwort "Sie führen 2.6 aus" lautet, was darauf hindeuten würde, dass 3.0 selbst in Ordnung ist. Es wäre schön, wenn Sie die Antwort aktualisieren könnten. Danke
inger
148

Python 2.6 und 3.0 erfordern die Feldnummern. In Python 2.7 und höher und 3.1 und höher können sie weggelassen werden.

In Version 2.7 geändert: Die Positionsargumentbezeichner können weggelassen werden, sodass '{} {}' gleichbedeutend mit '{0} {1}' ist.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |
Bis auf weiteres angehalten.
quelle
2
Der Versionsunterschied hat mich heute aufgemotzt! Danke für den Zeiger.
Richard Clayton
@ Tennis: Ich habe für Ihre Antwort gestimmt, weil Sie gezeigt haben, wie Sie das Problem in früheren Versionen von Python beheben können, indem Sie die Feldnummer angegeben haben. "Python 2.7 und höher" zu sagen, scheint mir jedoch irreführend, da nach anderen Antworten hier die Feldnummern in Python 3.0 erforderlich sind. Winston weist im letzten Kommentar zu seiner Antwort darauf hin, dass 2.7 nach 3.0 herauskam, sodass Ihre Aussage möglicherweise chronologisch korrekt ist, aber die meisten von uns würden sie als Hinweis darauf lesen, dass leere Klammern in 3.0 funktionieren sollten.
Tom Barron
@ TomBarron: Leere Klammern funktionieren bei mir: python3.4 -c 'print("|{}|{}|".format(3,4))'aber anscheinend hat 3.0 sie nicht (3.1 und höher). Ich werde meine Antwort klarstellen.
Bis auf weiteres angehalten.
2

Wenn Sie Eclipse verwenden, sollten Sie sich Fenster -> Einstellungen -> PyDev -> Interpreter - Python ansehen. Dort haben Sie eine Liste von Dolmetschern (mit Name und Ort). Wenn Sie für Ihr aktuelles Projekt einen Interpreter verwenden, der sich beispielsweise in / usr / bin / python befindet, führt die Ausführung von / usr / bin / python -V wahrscheinlich zu etwas wie "Python 2.6.6". Und da ist deine Antwort, wie Winston Ewert geschrieben hat.

(Sie können einen neuen Interperter hinzufügen, indem Sie einfach auf die Schaltfläche "Neu ..." klicken und / usr / bin / python3 als "Speicherort" angeben. Dann müssen Sie wahrscheinlich Ihre Projekteinstellungen ändern (Einstellungen -> PyDev - Interpreter / Grammatik).

ilektrik
quelle