¿Qué significa "SyntaxError: Faltan paréntesis en la llamada para 'imprimir'" en Python?

Resuelto ncoghlan asked hace 10 años • 11 respuestas

Cuando intento utilizar una printdeclaració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 printno se puede hacer que funcione como una declaración en Python 3.

ncoghlan avatar Aug 22 '14 17:08 ncoghlan
Aceptado

Este mensaje de error significa que está intentando utilizar Python 3 para seguir un ejemplo o ejecutar un programa que utiliza la printdeclaració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).

TypeErrorTambié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.

ncoghlan avatar Aug 22 '2014 10:08 ncoghlan

Desafortunadamente, el antiguo cómic xkcd ya no está completamente actualizado.

https://imgs.xkcd.com/comics/python.png

Desde Python 3.0 tienes que escribir:

print("Hello, World!")

Y alguien todavía tiene que escribir esa antigravitybiblioteca :(

Christian avatar Dec 24 '2017 13:12 Christian

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.

Sagar balai avatar Jul 31 '2017 06:07 Sagar balai

En Python 3.x, printahora es una función , en lugar de una declaración como lo era en 2.x.

Por lo tanto, printse 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 printuna función:

  • La printfunció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 printse puede reemplazar simplemente escribiendo una nueva función llamada print. Esto sería imposible con la printdeclaración.
Om Sao avatar Sep 22 '2019 20:09 Om Sao

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=', ')
Lukasz avatar Mar 29 '2018 08:03 Lukasz