Este mensaje de error significa que está intentando usar Python 3 para seguir un ejemplo o ejecutar un programa que usa la print
instrucción 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: paréntesis faltantes en la llamada a '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 ordinaria, 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 pistas útiles sobre lo que podría estar yendo mal:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
En cuanto a por qué se print
convirtió en una función ordinaria en Python 3, eso no se relacionaba con la forma básica de la declaración, sino con la forma en que hacía cosas más complicadas como imprimir varios elementos para 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
Comenzando con el lanzamiento de Python 3.6.3 en septiembre de 2017, algunos mensajes de error relacionados con la sintaxis de impresión 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 de "Paréntesis faltantes 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 procesar, puede incluir el texto completo en el resto de la línea en el reemplazo sugerido. Sin embargo, actualmente no intenta resolver las citas apropiadas para colocar alrededor de esa expresión (eso no es imposible, solo lo suficientemente complicado como para que no se haya hecho).
El TypeError
planteado 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 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 viejo cómic xkcd ya no está completamente actualizado.
Desde Python 3.0 tienes que escribir:
Y alguien todavía tiene que escribir esa
antigravity
biblioteca :(fuente
Hay un cambio en la sintaxis de Python 2 a Python 3. En Python 2,
funcionará pero en Python 3, use paréntesis como
Esta es una sintaxis equivalente a Scala y cercana a Java.
fuente
Si su código debe funcionar tanto en Python 2 como en 3, puede lograr esto cargando esto al comienzo de su programa:
Luego puede imprimir de la manera Python 3:
Si desea imprimir algo sin crear una nueva línea, puede hacer esto:
fuente
En Python 3, solo puede imprimir como:
Pero en Python 2, los paréntesis no son necesarios.
fuente
Básicamente, desde Python 3.x necesita usar
print
con paréntesis.Python 2.x : imprime "El señor de los anillos"
Python 3.x : print ("El señor de los anillos")
Explicación
print
Era una declaración en 2.x , pero es una función en 3.x . Ahora, hay una serie de buenas razones para esto.fuente
También podría agregar que sabía todo sobre el cambio de sintaxis entre
Python2.7
yPython3
, y mi código se escribió correctamente comoprint("string")
e inclusoprint(f"string")
...Pero después de algún tiempo de depuración me di cuenta de que mi script bash estaba llamando a Python como:
que tuvo el efecto de llamar a mi script de python de forma predeterminada usando el
python2.7
que dio el error. Entonces cambié mi script bash a:cuál de los gruesos usa python3 para ejecutar el script que solucionó el error.
fuente
Fuera de las respuestas directas aquí, uno debe notar la otra diferencia clave entre python 2 y 3. El wiki oficial de python aborda casi todas las principales diferencias y se centra en cuándo debe usar cualquiera de las versiones. Esta publicación de blog también hace un buen trabajo al explicar el universo actual de Python y el rompecabezas de alguna manera sin resolver 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, también deberá pensar qué paquetes estarán disponibles para usted (una ventaja de python 2) y las posibles optimizaciones que podrían realizarse en su código (una ventaja de python 3) .
fuente