Помилка "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; друк (sys.version), просто щоб переконатися, що ви випадково не викликали якусь іншу версію пітона
Вінстон Еверт

Відповіді:


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. (Дивіться відповідь Денніса Вільямсона).
Mayhewsw

У мене виникає ця проблема з Python 3.0.1 в Windows. (Напевно сказано 3.0.1 в першому рядку після запуску Python cmdline)
inger

@inger, для його використання потрібен python 3.1.
Вінстон Еверт

хм, спасибі за швидку відповідь. Однак, у відповідях нижче написано "2.7 і пізніше" - значить, 3.0.1 був раніше? Також ОП запитав про проблему в 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.