Ошибка «ValueError: имя поля нулевой длины в формате» в Python 3.0,3.1,3.2


120

Я пытаюсь изучить Python (точнее, 3) и получаю эту ошибку:

ValueError: zero length field name in format

Я погуглил и выяснил, что вам нужно указать числа:

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

И не так, как в учебнике (с сайта lynda.com) на самом деле говорится:

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

Следующее руководство имеет Python 3.1, а я использую 3.2, и что я читал об этой ошибке, так это то, что это происходит только в <3.1 (3.0). Они отменили это в 3.2, или я что-то делаю не так?

Кроме того, говорите медленно;) это буквально моя первая ночь изучения Python и только второй «сценарий», который я написал на Python.


1
Попробуйте добавить это: import sys; print (sys.version), чтобы убедиться, что вы случайно не вызываете другую версию python
Уинстон Эверт

Ответы:


131

Я собираюсь предположить, что вы как-то случайно запускаете python 2.6.

Эта функция доступна не ниже 3.1, если вы используете python 3, или 2.7, если вы используете python 2.


3
Спасибо! вот и все! Пришлось сменить шебанг на: #! /usr/local/bin/python3осмотрев все. Существует 3 разных места установки python на Mac -_- wtf.
Оскар Годсон

4
Это частично верно: код OP работал бы, если бы это был python 2.7, но не 2.6. (См. Ответ @Dennis Williamson).
mayhewsw

У меня проблема с Python 3.0.1 в Windows. (Он определенно говорит 3.0.1 в первой строке после запуска Python cmdline)
inger

@inger, для его использования вам понадобится python 3.1.
Уинстон Эверт,

хм, спасибо за быстрый ответ .. однако в ответах ниже написано «2.7 и новее» - значит, 3.0.1 была раньше? Кроме того, OP спросил о проблеме в версии 3.0 (+ другие) - на что ваш ответ: «вы используете 2.6», что предполагает, что сама версия 3.0 в порядке. Было бы неплохо, если бы вы могли обновить ответ. Спасибо
inger

148

Python 2.6 и 3.0 требуют номеров полей. В Python 2.7 и новее и 3.1 и новее их можно не указывать.

Изменено в версии 2.7: спецификаторы позиционных аргументов могут быть опущены, поэтому '{} {}' эквивалентно '{0} {1}'.

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

2
Разница версий меня сегодня взволновала! Благодарю за указатель.
Ричард Клейтон

@Dennis: Я проголосовал за ваш ответ, потому что вы показали, как решить проблему в более ранних версиях python, указав номер поля. Однако фраза «Python 2.7 и новее» кажется мне вводящей в заблуждение, потому что, согласно другим ответам здесь, номера полей требуются в Python 3.0. Уинстон указывает в последнем комментарии к своему ответу, что 2.7 вышло после 3.0, поэтому ваше утверждение может быть хронологически правильным, но большинство из нас прочитало бы его как указание на то, что пустые фигурные скобки должны работать в 3.0.
Том Бэррон,

@TomBarron: у меня работают пустые фигурные скобки:, python3.4 -c 'print("|{}|{}|".format(3,4))'но, по-видимому, в версии 3.0 этого нет (в версии 3.1 и более поздних). Уточню свой ответ.
Приостановлено до дальнейшего уведомления.

2

Если вы используете Eclipse, вам следует заглянуть в Window -> Preferences -> PyDev -> Interpreter - Python. Вот список переводчиков (с указанием фамилии и местонахождения). Если для вашего текущего проекта вы используете интерпретатор, который находится, например, в / usr / bin / python, то, вероятно, выполнение / usr / bin / python -V даст вам что-то вроде «Python 2.6.6». И есть ваш ответ, как написал Уинстон Эверт.

(вы можете добавить новый интерпретатор, просто нажав кнопку «Создать ...» и указав / usr / bin / python3 в качестве «местоположения». Тогда вам, вероятно, придется изменить настройки вашего проекта (Настройки -> PyDev - Интерпретатор / Грамматика).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.