Erro "ValueError: nome de campo com tamanho zero no formato" no Python 3.0,3.1,3.2

120

Estou tentando aprender Python (3 para ser mais específico) e estou recebendo este erro:

ValueError: zero length field name in format

Eu pesquisei no Google e descobri que você precisa especificar os números:

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 não é como o tutorial (do lynda.com) realmente diz para fazer:

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

O tutorial que estou a seguir tem Python 3.1 e estou usando 3.2, e o que eu li sobre esse erro é que isso só acontece em <3.1 (3.0). Eles desfizeram isso no 3.2, ou estou fazendo algo errado?

Além disso, fale devagar;) esta é literalmente minha primeira noite aprendendo Python e apenas o segundo "script" que escrevi em Python.

Oscar Godson
fonte
1
Tente adicionar o seguinte: import sys; imprimir (sys.version), apenas para se certificar que você não está acidentalmente chamar alguma outra versão do python
Winston Ewert

Respostas:

131

Eu acho que você está executando o python 2.6 por acidente de alguma forma.

Esse recurso está disponível apenas para pelo menos 3.1 se você estiver usando o python 3 ou 2.7 se estiver usando o python 2.

Winston Ewert
fonte
3
Obrigado! foi isso! Tive que mudar minhas coisas para: #! /usr/local/bin/python3depois de olhar tudo de novo. Existem 3 locais diferentes de instalações python no Mac -_- wtf.
Oscar Godson 27/03
4
Isso está parcialmente correto: o código do OP funcionaria se fosse python 2.7, mas não 2.6. (Veja a resposta de @Dennis Williamson).
precisa saber é o seguinte
Estou tendo esse problema com o Python 3.0.1 no Windows. (Ele definitivamente diz 3.0.1 na primeira linha após o início Python cmdline)
inger
@inger, você precisa do python 3.1 para usá-lo.
Winston Ewert
hmm, obrigado pela resposta rápida .. no entanto, as respostas abaixo indicam "2.7 e posteriores" - então a 3.0.1 foi anterior? Além disso, o OP perguntou sobre o problema no 3.0 (+ outros) - para o qual sua resposta é "você está executando o 2.6", o que sugere que o próprio 3.0 está ok. Seria bom se você pudesse atualizar a resposta. Graças
inger
148

Python 2.6 e 3.0 requerem os números de campo. No Python 2.7 e posterior e 3.1 e posterior, eles podem ser omitidos.

Alterado na versão 2.7: Os especificadores de argumento posicional podem ser omitidos, portanto '{} {}' é equivalente a '{0} {1}'.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |
Pausado até novo aviso.
fonte
2
A diferença de versão me levantou hoje! Obrigado pelo ponteiro.
Richard Clayton
@ Dennis: Votei na sua resposta, porque você mostrou como resolver o problema nas versões anteriores do python, especificando o número do campo. No entanto, dizer "Python 2.7 e posterior" parece enganador para mim porque, de acordo com outras respostas aqui, os números de campo são obrigatórios no Python 3.0. Winston ressalta no último comentário em sua resposta que o 2.7 foi lançado após o 3.0, portanto, sua declaração pode ser cronologicamente correta, mas a maioria de nós a leria como indicação de que chaves vazias deveriam funcionar no 3.0.
Tom Barron #
@ TomBarron: Aparelhos vazios funcionam para mim:, python3.4 -c 'print("|{}|{}|".format(3,4))'mas aparentemente o 3.0 não o possui (3.1 e posterior). Vou esclarecer minha resposta.
Pausado até novo aviso.
2

Se você estiver usando o Eclipse, consulte Janela -> Preferências -> PyDev -> Intérprete - Python. Lá você tem uma lista de intérpretes (com nome e local). Se, no seu projeto atual, você estiver usando um interpretador, localizado por exemplo em / usr / bin / python, provavelmente executando / usr / bin / python -V, o que lhe dará algo como "Python 2.6.6". E há a sua resposta, como Winston Ewert escreveu.

(você pode adicionar um novo interpretador simplesmente clicando no botão "Novo ..." e fornecendo / usr / bin / python3 como "local". Em seguida, você provavelmente precisará alterar as configurações do seu projeto (Preferências -> PyDev - Intérprete / Gramática).

ilektrik
fonte