¿Qué significa "SyntaxError: Faltan paréntesis en la llamada para 'imprimir'" en Python?
Cuando intento utilizar una print
declaración 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?
Consulte Obtención de SyntaxError para imprimir con el argumento de palabra clave end=' ' para ver el problema opuesto.
Consulte la impresión de Python 3 sin paréntesis para conocer soluciones alternativas y confirmar que print
no se puede hacer que funcione como una declaración en Python 3.
Este mensaje de error significa que está intentando utilizar Python 3 para seguir un ejemplo o ejecutar un programa que utiliza la print
declaración de Python 2:
print "Hello, World!"
La declaración anterior no funciona en Python 3. En Python 3 debe agregar paréntesis alrededor del valor que se imprimirá:
print("Hello, World!")
"SyntaxError: Faltan paréntesis en la llamada 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, la impresión de valores pasó de ser una declaración distinta a ser una llamada de función ordinaria, por lo que ahora necesita paréntesis:
>>> print("Hello, World!")
Hello, World!
En versiones anteriores de Python 3, el intérprete simplemente informaba de un error de sintaxis genérico, sin proporcionar ninguna pista útil sobre lo que podría estar fallando:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
En cuanto a por qué print
se convirtió en una función ordinaria en Python 3, eso no se relacionaba con la forma básica de la declaración, sino más bien con cómo se hacían cosas más complicadas como imprimir varios elementos en stderr con un espacio 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
A partir de la versión Python 3.6.3 en septiembre de 2017, algunos mensajes de error relacionados con la sintaxis de impresión de Python 2.x se actualizaron 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 "Faltan paréntesis en la llamada para imprimir" es un error de sintaxis en tiempo de compilación y, por lo tanto, tiene acceso al código fuente sin formato, puede incluir el texto completo en el resto de la línea en el reemplazo sugerido. Sin embargo, actualmente no intenta encontrar las comillas apropiadas para colocar alrededor de esa expresión (eso no es imposible, sólo lo suficientemente complicado como para que no se haya hecho).
TypeError
También se ha personalizado el relieve para el operador de turno derecho:
>>> 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 aparece cuando se ejecuta el código, en lugar de cuando se compila, no tiene acceso al código fuente sin formato y, por lo tanto, utiliza metavariables ( <message>
y <output_stream>
) en la expresión de reemplazo sugerida en lugar de lo que el usuario realmente escribió. . 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.
Desafortunadamente, el antiguo cómic xkcd ya no está completamente actualizado.
Desde Python 3.0 tienes que escribir:
print("Hello, World!")
Y alguien todavía tiene que escribir esa antigravity
biblioteca :(
Hay un cambio en la sintaxis de Python 2 a Python 3. En Python 2,
print "Hello, World!"
funcionará, pero en Python 3, use paréntesis como
print("Hello, World!")
Esta es una sintaxis equivalente a Scala y cercana a Java.
En Python 3.x, print
ahora es una función , en lugar de una declaración como lo era en 2.x.
Por lo tanto, print
se usa llamándolo como una función y, por lo tanto, se necesitan paréntesis:
Python 2.x : imprime "El señor de los anillos"
Python 3.x : imprimir ("El señor de los anillos")
Existen múltiples ventajas al crear print
una función:
- La
print
función ofrece más flexibilidad al imprimir múltiples valores (que ahora son argumentos de la función). En particular, permite salpicar argumentos :
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+')
foo+bar+baz
- El comportamiento de las llamadas a
print
se puede reemplazar simplemente escribiendo una nueva función llamadaprint
. Esto sería imposible con laprint
declaración.
Si su código debería funcionar tanto en Python 2 como en Python 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=', ')