Essa mensagem de erro significa que você está tentando usar o Python 3 para seguir um exemplo ou executar um programa que usa a print
instrução Python 2 :
print "Hello, World!"
A declaração acima não funciona no Python 3. No Python 3, você precisa adicionar parênteses ao redor do valor a ser impresso:
print("Hello, World!")
“SyntaxError: parênteses ausentes na chamada para 'imprimir'” é 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 do Python 2 enquanto executam o Python 3.
No Python 3, os valores de impressão mudaram de uma declaração distinta para uma chamada de função comum; portanto, agora é necessário parênteses:
>>> print("Hello, World!")
Hello, World!
Nas versões anteriores do Python 3, o intérprete apenas relata um erro de sintaxe genérico, sem fornecer dicas úteis sobre o que pode estar errado:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Quanto ao motivo pelo qualprint
se tornou uma função comum no Python 3, isso não estava relacionado à forma básica da declaração, mas à maneira como você fazia coisas mais complicadas, como imprimir vários itens em stderr com um espaço à direita, em vez de terminar a linha.
No Python 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
No 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
A partir da versão 3.6.3 do Python em setembro de 2017, algumas mensagens de erro relacionadas à sintaxe de impressão do Python 2.x foram atualizadas para recomendar seus equivalentes do Python 3.x:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Como o caso "Parênteses ausentes na chamada para impressão" é um erro de sintaxe em tempo de compilação e, portanto, tem acesso ao código-fonte bruto, ele pode incluir o texto completo no restante da linha na substituição sugerida. No entanto, no momento, ele não tenta encontrar as aspas apropriadas para colocar em torno dessa expressão (isso não é impossível, apenas suficientemente complicado para que isso não tenha sido feito).
O TypeError
aumento para o operador de turno certo também foi personalizado:
>>> 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 esse erro é gerado quando o código é executado, e não quando é compilado, ele não tem acesso ao código-fonte bruto e, portanto, usa meta-variáveis ( <message>
e <output_stream>
) na expressão de substituição sugerida, em vez do que o usuário realmente digitou . Diferentemente do caso de erro de sintaxe, é simples colocar aspas em torno da expressão Python na mensagem de erro de deslocamento à direita personalizada.
Infelizmente, o antigo quadrinho xkcd não está mais atualizado.
Desde o Python 3.0, você precisa escrever:
E alguém ainda precisa escrever essa
antigravity
biblioteca :(fonte
Há uma alteração na sintaxe de Python 2 para Python 3. No Python 2,
funcionará, mas no Python 3, use parênteses como
Isso é uma sintaxe equivalente ao Scala e próximo ao Java.
fonte
Se seu código funcionar em Python 2 e 3, você poderá conseguir isso carregando isso no início do seu programa:
Então você pode imprimir da maneira Python 3:
Se você quiser imprimir algo sem criar uma nova linha - faça o seguinte:
fonte
No Python 3, você só pode imprimir como:
Mas no Python 2, os parênteses não são necessários.
fonte
Basicamente, desde o Python 3.x você precisa usar
print
parênteses.Python 2.x : impressão "O Senhor dos Anéis"
Python 3.x : print ("O Senhor dos Anéis")
Explicação
print
foi uma declaração em 2.x , mas é uma função em 3.x . Agora, existem várias boas razões para isso.fonte
Eu também poderia acrescentar que sabia tudo sobre a mudança de sintaxe entre
Python2.7
ePython3
, e meu código foi escrito corretamente comoprint("string")
e atéprint(f"string")
...Mas, após algum tempo de depuração, percebi que meu script bash estava chamando python como:
que teve o efeito de chamar meu script python por padrão usando o
python2.7
qual deu o erro. Então mudei meu script bash para:qual dos grossos usa python3 para executar o script que corrigiu o erro.
fonte
Fora das respostas diretas aqui, deve-se observar a outra diferença principal entre python 2 e 3. O wiki oficial do python aborda quase todas as principais diferenças e se concentra em quando você deve usar uma das versões. Esta postagem no blog também explica muito bem o universo atual do python e o quebra-cabeça de alguma maneira não resolvido da migração para o python 3.
Até onde eu sei, você está começando a aprender a linguagem python. Você deve considerar os artigos mencionados antes de continuar na rota python 3. Você não apenas precisará alterar parte de sua sintaxe, mas também precisará pensar sobre quais pacotes estarão disponíveis para você (uma vantagem do python 2) e possíveis otimizações que poderiam ser feitas no seu código (uma vantagem do python 3) .
fonte