Errore "ValueError: nome del campo di lunghezza zero nel formato" in Python 3.0,3.1,3.2


120

Sto cercando di imparare Python (3 per essere più precisi) e ricevo questo errore:

ValueError: zero length field name in format

Ho cercato su Google e ho scoperto che devi specificare i numeri:

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

E non come il tutorial (da lynda.com) in realtà dice di fare:

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

Il tutorial che segue ha Python 3.1 e sto usando 3.2 e quello che ho letto su questo errore è che questo accade solo in <3.1 (3.0). L'hanno annullato in 3.2 o sto facendo qualcosa di sbagliato?

Inoltre, parla lentamente;) questa è letteralmente la mia prima notte di apprendimento di Python e solo il secondo "script" che ho scritto in Python.


1
Prova ad aggiungere questo: import sys; print (sys.version), solo per assicurarti di non richiamare accidentalmente qualche altra versione di python
Winston Ewert

Risposte:


131

Immagino che tu stia eseguendo python 2.6 per sbaglio in qualche modo.

Questa funzione è disponibile solo per almeno 3.1 se stai usando python 3, o 2.7 se stai usando python 2.


3
Grazie! quello era! Ho dovuto cambiare le mie frasi in: #! /usr/local/bin/python3dopo aver guardato dappertutto. Ci sono 3 diverse posizioni di installazione di python su Mac -_- wtf.
Oscar Godson,

4
Questo è parzialmente corretto: il codice di OP funzionerebbe se fosse Python 2.7, ma non 2.6. (Vedi la risposta di @Dennis Williamson).
mayhewsw

Sto riscontrando questo problema con Python 3.0.1 su Windows. (Dice sicuramente 3.0.1 nella prima riga dopo aver avviato Python cmdline)
intero

@inger, hai bisogno di python 3.1 per usarlo.
Winston Ewert

hmm, grazie per la rapida risposta ... tuttavia, le risposte sotto dicono "2.7 e versioni successive" - ​​quindi 3.0.1 era prima? Inoltre, l'OP ha chiesto del problema in 3.0 (+ altri) - a cui la tua risposta è "stai eseguendo 2.6", il che suggerirebbe che 3.0 stesso sia ok. Sarebbe bello se potessi aggiornare la risposta. Grazie
inger

148

Python 2.6 e 3.0 richiedono i numeri di campo. In Python 2.7 e versioni successive e 3.1 e versioni successive, possono essere omessi.

Modificato nella versione 2.7: gli specificatori di argomenti posizionali possono essere omessi, quindi "{} {}" è equivalente a "{0} {1}".

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

2
La differenza di versione mi ha sollevato oggi! Grazie per il puntatore.
Richard Clayton

@Dennis: ho votato per la tua risposta perché hai mostrato come affrontare il problema nelle versioni precedenti di python, specificando il numero del campo. Tuttavia, dire "Python 2.7 e versioni successive" mi sembra fuorviante perché secondo altre risposte qui, i numeri di campo sono obbligatori in Python 3.0. Winston fa notare nell'ultimo commento alla sua risposta che 2.7 è uscito dopo 3.0, quindi la tua affermazione potrebbe essere cronologicamente corretta, ma la maggior parte di noi la leggerebbe come indicante che le parentesi graffe vuote dovrebbero funzionare nella 3.0.
Tom Barron

@ TomBarron: le parentesi graffe vuote funzionano per me:, python3.4 -c 'print("|{}|{}|".format(3,4))'ma a quanto pare 3.0 non ce l'ha (3.1 e versioni successive lo fanno). Chiarirò la mia risposta.
In pausa fino a nuovo avviso.

2

Se stai usando Eclipse dovresti guardare in Finestra -> Preferenze -> PyDev -> Interprete - Python. Lì hai un elenco di interpreti (con nome e posizione). Se per il tuo progetto attuale stai usando un interprete che si trova ad esempio in / usr / bin / python, allora probabilmente eseguendo / usr / bin / python -V otterrai qualcosa come "Python 2.6.6". E c'è la tua risposta come ha scritto Winston Ewert.

(puoi aggiungere un nuovo interprete semplicemente facendo clic sul pulsante "Nuovo ..." e dando / usr / bin / python3 come "posizione". Quindi probabilmente dovrai modificare le impostazioni del tuo progetto (Preferenze -> PyDev - Interprete / Grammatica).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.