Quando eu tento utilizar uma declaração `impressa' em Python, isso me dá esse erro:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: Missing parentheses in call to 'print'
O que é que isso significa?
Esta mensagem de erro significa que você está tentando utilizar o Python 3 para seguir um exemplo ou executar um programa que utiliza a declaração impressão
do Python 2:
print "Hello, World!"
A afirmação acima não funciona em Python 3. Em Python 3 você precisa adicionar parênteses em torno do valor a ser impresso:
print("Hello, World!")
"SyntaxError": Faltam parênteses na chamada para 'print' " é uma nova mensagem de erro que foi adicionada no Python 3.4.2 principalmente para ajudar os usuários que estão tentando seguir um tutorial Python 2 enquanto executam o Python 3.
Em Python 3, os valores de impressão mudaram de ser uma declaração distinta para ser uma chamada de função comum, por isso agora precisa de parênteses:
>>> print("Hello, World!")
Hello, World!
Em versões anteriores do Python 3, o intérprete apenas relata um erro de sintaxe genérico, sem fornecer nenhuma dica útil sobre o que pode estar a correr mal:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Quanto a porque impressão
tornou-se uma função comum em Python 3, que não'não se relacionava com a forma básica da declaração, mas sim com como você fazia coisas mais complicadas como imprimir vários itens para stderr com um espaço de fuga ao invés de terminar a linha.
Em Python 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
Em Python 3:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6
Começando com o lançamento do Python 3.6.3 em setembro de 2017, algumas mensagens de erro relacionadas com a sintaxe de impressão do Python 2.x foram atualizadas para recomendar suas contrapartes Python 3.x:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Desde o "Faltam parênteses na chamada para impressão" case é um erro de sintaxe de tempo de compilação e, portanto, tem acesso ao código fonte bruto, it's capaz de incluir o texto completo no resto da linha na substituição sugerida. No entanto, ele não'atualmente tenta trabalhar as citações apropriadas para colocar em torno dessa expressão (isso'não é impossível, apenas suficientemente complicado que não't tenha sido feito).
O TypeError
levantado para o operador do turno certo também foi customizado:
>>> print >> sys.stderr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?
Como este erro é levantado quando o código é executado, ao invés de quando ele é compilado, ele não't tem acesso ao código fonte bruto, e portanto utiliza meta-variáveis (<message>
e <output_stream>
) na expressão de substituição sugerida ao invés de qualquer coisa que o usuário realmente digitou. Ao contrário do caso de erro de sintaxe, é simples colocar aspas em torno da expressão Python na mensagem de erro de deslocamento à direita personalizada.
Há uma mudança na sintaxe de Python 2 para Python 3. Em Python 2,
print "Hello, World!"
irá funcionar, mas em Python 3, use parênteses como
print("Hello, World!")
Esta é uma sintaxe equivalente a Scala e próxima a Java.