Erreur «ValueError: nom de champ de longueur nulle au format» dans Python 3.0,3.1,3.2

120

J'essaie d'apprendre Python (3 pour être plus précis) et j'obtiens cette erreur:

ValueError: zero length field name in format

Je l'ai googlé et j'ai découvert que vous devez spécifier les chiffres:

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

Et pas comme le tutoriel (de lynda.com) dit réellement de faire:

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

Le tutoriel im suivant a Python 3.1, et im utilisant 3.2 et ce que j'ai lu à propos de cette erreur est que cela ne se produit que dans <3.1 (3.0). Ont-ils annulé cela dans 3.2 ou est-ce que je fais quelque chose de mal?

Aussi, parlez lentement;) c'est littéralement ma première nuit d'apprentissage de Python et seulement le deuxième "script" que j'ai écrit en Python.

Oscar Godson
la source
1
Essayez d'ajouter ceci: import sys; print (sys.version), juste pour vous assurer de ne pas appeler accidentellement une autre version de python
Winston Ewert

Réponses:

131

Je suppose que vous utilisez python 2.6 par accident.

Cette fonctionnalité n'est disponible que pour au moins 3.1 si vous utilisez python 3, ou 2.7 si vous utilisez python 2.

Winston Ewert
la source
3
Merci! c'était ça! J'ai dû changer mes shebangs en: #! /usr/local/bin/python3après avoir cherché partout. Il existe 3 emplacements différents pour les installations de python sur Mac -_- wtf.
Oscar Godson
4
C'est partiellement correct: le code d'OP fonctionnerait s'il s'agissait de python 2.7, mais pas de 2.6. (Voir la réponse de @Dennis Williamson).
mayhewsw
J'obtiens ce problème avec Python 3.0.1 sous Windows. (Il dit définitivement 3.0.1 dans la première ligne après le démarrage de Python cmdline)
inger
@inger, vous avez besoin de python 3.1 pour l'utiliser.
Winston Ewert
hmm, merci pour la réponse rapide ... cependant, les réponses ci-dessous indiquent "2.7 et plus tard" - donc 3.0.1 était plus tôt? De plus, l'OP a posé des questions sur le problème de la version 3.0 (+ autres) - auquel votre réponse est "vous exécutez 2.6", ce qui suggérerait que la 3.0 elle-même est correcte. Ce serait bien si vous pouviez mettre à jour la réponse. Merci
Inger
148

Python 2.6 et 3.0 nécessitent les numéros de champ. Dans Python 2.7 et versions ultérieures et 3.1 et versions ultérieures, ils peuvent être omis.

Modifié dans la version 2.7: les spécificateurs d'arguments de position peuvent être omis, donc '{} {}' est équivalent à '{0} {1}'.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |
Suspendu jusqu'à nouvel ordre.
la source
2
La différence de version m'a fait grimper aujourd'hui! Merci pour le pointeur.
Richard Clayton
@Dennis: J'ai voté pour votre réponse car vous avez montré comment résoudre le problème dans les versions précédentes de python, en spécifiant le numéro de champ. Cependant, dire "Python 2.7 et versions ultérieures" me semble trompeur car selon d'autres réponses ici, les numéros de champ sont obligatoires dans Python 3.0. Winston souligne dans le dernier commentaire sur sa réponse que 2.7 est sorti après 3.0, donc votre déclaration peut être chronologiquement correcte, mais la plupart d'entre nous la liront comme indiquant que les accolades vides devraient fonctionner en 3.0.
Tom Barron
@TomBarron: Les accolades vides fonctionnent pour moi:, python3.4 -c 'print("|{}|{}|".format(3,4))'mais apparemment, la version 3.0 ne l'a pas (3.1 et les versions ultérieures). Je vais clarifier ma réponse.
Suspendu jusqu'à nouvel ordre.
2

Si vous utilisez Eclipse, vous devriez regarder dans Window -> Preferences -> PyDev -> Interpreter - Python. Là, vous avez une liste d'interprètes (avec nom et lieu). Si pour votre projet actuel vous utilisez un interpréteur qui se trouve par exemple dans / usr / bin / python alors probablement exécuter / usr / bin / python -V vous donnera quelque chose comme "Python 2.6.6". Et il y a votre réponse comme l'a écrit Winston Ewert.

(vous pouvez ajouter un nouvel interperter en cliquant simplement sur le bouton "Nouveau ..." et en donnant / usr / bin / python3 comme "emplacement". Ensuite, vous devrez probablement modifier les paramètres de votre projet (Préférences -> PyDev - Interpréteur / Grammaire).

ilektrik
la source