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.