Błąd „ValueError: nazwa pola o zerowej długości w formacie” w Pythonie 3.0,3.1,3.2


120

Próbuję nauczyć się Pythona (3, żeby być bardziej szczegółowym) i otrzymuję ten błąd:

ValueError: zero length field name in format

Wyszukałem w Google i dowiedziałem się, że musisz podać liczby:

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

I nie tak, jak w samouczku (z lynda.com) tak naprawdę mówi:

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

Poniższy samouczek im dotyczy języka Python 3.1 i używam wersji 3.2. Czytałem o tym błędzie, że dzieje się to tylko w wersji <3.1 (3.0). Czy cofnęli to w 3.2, czy robię coś źle?

Mów też powoli;) to jest dosłownie moja pierwsza nocna nauka Pythona i dopiero drugi "skrypt", który napisałem w Pythonie.


1
Spróbuj dodać to: import sys; print (sys.version), aby upewnić się, że przypadkowo nie wywołujesz innej wersji Pythona
Winston Ewert

Odpowiedzi:


131

Zgaduję, że przez przypadek uruchamiasz Pythona 2.6.

Ta funkcja jest dostępna tylko dla co najmniej 3.1, jeśli używasz Pythona 3 lub 2.7, jeśli używasz Pythona 2.


3
Dzięki! to było to! Musiałem zmienić moje shebangs na: #! /usr/local/bin/python3po obejrzeniu całego. Istnieją 3 różne lokalizacje instalacji Pythona na Mac -_- wtf.
Oscar Godson,

4
Jest to częściowo poprawne: kod OP działałby, gdyby był to Python 2.7, ale nie 2.6. (Zobacz odpowiedź @Dennis Williamson).
mayhewsw,

Ten problem pojawia się w Pythonie 3.0.1 w systemie Windows. (Na pewno jest napisane 3.0.1 w pierwszej linii po uruchomieniu Pythona cmdline)
inger

@inger, potrzebujesz Pythona 3.1, aby go używać.
Winston Ewert

hmm, dzięki za szybką odpowiedź… jednak w odpowiedziach poniżej jest napisane „2.7 i później” - więc 3.0.1 było wcześniej? Ponadto OP zapytał o problem w wersji 3.0 (+ inne) - na co Twoja odpowiedź brzmi: „używasz wersji 2.6”, co sugerowałoby, że sama wersja 3.0 jest w porządku. Byłoby miło, gdybyś mógł zaktualizować odpowiedź. Dzięki
inger

148

Python 2.6 i 3.0 wymagają numerów pól. W Pythonie 2.7 i nowszych oraz 3.1 i późniejszych można je pominąć.

Zmieniono w wersji 2.7: specyfikatory argumentów pozycyjnych można pominąć, więc „{} {}” jest równoważne „{0} {1}”.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |

2
Różnica wersji podbiła mnie dzisiaj! Dziękuję za wskazówkę.
Richard Clayton,

@Dennis: Głosowałem za twoją odpowiedzią, ponieważ pokazałeś, jak rozwiązać problem we wcześniejszych wersjach Pythona, podając numer pola. Jednak powiedzenie „Python 2.7 i nowsze” wydaje mi się mylące, ponieważ zgodnie z innymi odpowiedziami tutaj, numery pól są wymagane w Pythonie 3.0. Winston w ostatnim komentarzu do swojej odpowiedzi wskazuje, że wersja 2.7 pojawiła się po 3.0, więc twoje stwierdzenie może być chronologicznie poprawne, ale większość z nas przeczytałoby to jako wskazujące, że puste nawiasy powinny działać w 3.0.
Tom Barron

@TomBarron: U mnie działają puste nawiasy klamrowe: python3.4 -c 'print("|{}|{}|".format(3,4))'ale najwyraźniej 3.0 go nie ma (3.1 i nowsze). Wyjaśnię swoją odpowiedź.
Wstrzymano do odwołania.

2

Jeśli używasz Eclipse, powinieneś zajrzeć do Window -> Preferences -> PyDev -> Interpreter - Python. Tam masz listę tłumaczy (z nazwiskiem i lokalizacją). Jeśli w swoim obecnym projekcie używasz interpretera, który znajduje się na przykład w / usr / bin / python, to prawdopodobnie wykonanie / usr / bin / python -V da ci coś w rodzaju "Python 2.6.6". A oto twoja odpowiedź, jak napisał Winston Ewert.

(możesz dodać nowego interpretera, po prostu klikając przycisk "Nowy ..." i podając / usr / bin / python3 jako "lokalizację". Następnie prawdopodobnie musisz zmienić ustawienia projektu (Preferencje -> PyDev - Interpreter / Gramatyka).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.