python python-3.x

¿Qué significa “SyntaxError: Falta paréntesis en la llamada a ''imprimir''” en Python?



python-3.x (6)

Cuando intento usar una declaración de print en Python, me da este error:

>>> print "Hello, World!" File "<stdin>", line 1 print "Hello, World!" ^ SyntaxError: Missing parentheses in call to ''print''

Qué significa eso?


Desafortunadamente, el viejo xkcd comic ya no está completamente actualizado.

Desde Python 3.0 tienes que escribir:

print("Hello, World!")

Y alguien todavía tiene que escribir esa biblioteca antigravity :(


En Python 3, solo puedes imprimir como:

print("STRING")

Pero en Python 2, los paréntesis no son necesarios.


Este mensaje de error significa que está intentando usar Python 3 para seguir un ejemplo o ejecutar un programa que usa la declaración de print Python 2:

print "Hello, World!"

La declaración anterior no funciona en Python 3. En Python 3 necesita agregar paréntesis alrededor del valor a imprimir:

print("Hello, World!")

“SyntaxError: Falta paréntesis en call para ''imprimir''” es un nuevo mensaje de error que se agregó en Python 3.4.2 principalmente para ayudar a los usuarios que intentan seguir un tutorial de Python 2 mientras ejecutan Python 3.

En Python 3, los valores de impresión cambiaron de ser una declaración distinta a ser una llamada de función normal, por lo que ahora necesita paréntesis:

>>> print("Hello, World!") Hello, World!

En versiones anteriores de Python 3, el intérprete solo informa un error de sintaxis genérico, sin proporcionar sugerencias útiles sobre lo que podría estar mal:

>>> print "Hello, World!" File "<stdin>", line 1 print "Hello, World!" ^ SyntaxError: invalid syntax

En cuanto a por qué la print convirtió en una función normal en Python 3, no se relacionaba con la forma básica de la declaración, sino más bien con la forma en que hacía cosas más complicadas, como imprimir varios elementos a stderr con un espacio al final en lugar de terminar la línea.

En Python 2:

>>> import sys >>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6 1 2 3 4 5 6

En 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

Comenzando con la versión de Python 3.6.3 en septiembre de 2017, algunos mensajes de error relacionados con la sintaxis de impresión de Python 2.x se han actualizado para recomendar sus contrapartes de Python 3.x:

>>> print "Hello!" File "<stdin>", line 1 print "Hello!" ^ SyntaxError: Missing parentheses in call to ''print''. Did you mean print("Hello!")?

Dado que el caso "Falta paréntesis en la llamada para imprimir" es un error de sintaxis de tiempo de compilación y, por lo tanto, tiene acceso al código fuente en bruto, puede incluir el texto completo en el resto de la línea en el reemplazo sugerido. Sin embargo, actualmente no intenta calcular las comillas adecuadas para colocar alrededor de esa expresión (eso no es imposible, es tan complicado que no se ha hecho).

El TypeError elevado para el operador de turno derecho también se ha 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>)"?

Dado que este error se genera cuando se ejecuta el código, en lugar de cuando se compila, no tiene acceso al código fuente sin procesar y, por lo tanto, utiliza <output_stream> variables ( <message> y <output_stream> ) en la expresión de reemplazo sugerida de lo que sea que el usuario haya escrito. A diferencia del caso de error de sintaxis, es sencillo colocar comillas alrededor de la expresión de Python en el mensaje de error de desplazamiento a la derecha personalizado.


Fuera de las respuestas directas aquí, uno debe notar la otra diferencia clave entre python 2 y 3. La wiki oficial de python incluye casi todas las diferencias principales y se enfoca en cuándo debe usar cualquiera de las versiones. Esta publicación del blog también explica bien el universo actual de Python y el enigma no resuelto de pasar a python 3.

Por lo que puedo decir, estás empezando a aprender el lenguaje python. Debe considerar los artículos antes mencionados antes de continuar por la ruta de python 3. No solo tendrá que cambiar parte de su sintaxis, sino que también tendrá que pensar qué paquetes estarán disponibles para usted (una ventaja de python 2) y las posibles optimizaciones que se podrían realizar en su código (una ventaja de python 3). .


Hay un cambio en la sintaxis de Python 2 a Python 3. En Python 2,

print "Hello, World!" will work but

En Python 3, usa llaves como

print("Hello, World!")

Esta es una sintaxis equivalente a Scala y cercana a Java.


Si su código debería funcionar tanto en Python 2 como en 3, puede lograrlo cargando esto al comienzo de su programa:

from __future__ import print_function # If code has to work in Python 2 and 3!

Luego puedes imprimir en la forma Python 3:

print("python")

Si desea imprimir algo sin crear una nueva línea, puede hacer esto:

for number in range(0, 10): print(number, end='', '')