Categorías
Python

PyGame: Una cartilla en la programación de juegos en Python

 

Tabla de Contenidos

  • Sintaxis no válida en Python
  • SyntaxError Excepción y Rastreo
  • Común Sintaxis ProblemsMisusing la Asignación de operadora (=) Error ortográfico, falta o El mal uso de Python KeywordsMissing paréntesis, corchetes y QuotesMistaking Diccionario SyntaxUsing la IndentationDefining incorrecto y FunctionsChanging Calling Versiones de Python
  • mal uso del operador de asignación (=)
  • con errores ortográficos, faltantes o el mal uso del pitón Palabras clave
  • que faltan paréntesis, corchetes y Cotizaciones
  • confundir Diccionario sintaxis
  • Utilizando el incorrecto sangría
  • Definición y funciones de llamada
  • Cambio Versiones de Python
  • Conclusión
  • mal uso del operador de asignación (=)
  • con errores ortográficos, faltantes o el mal uso del pitón Palabras clave
  • que faltan paréntesis, corchetes y Cotizaciones
  • Diccionario confundir sintaxis
  • Uso de la Inde incorrecto ntation
  • Definición y funciones de llamada
  • de cambiar la versión de Python

Python es conocido por su sintaxis sencilla. Sin embargo, cuando estás aprendiendo Python por primera vez o cuando se ha llegado a Python con una sólida formación en otro lenguaje de programación, es posible que encuentre algunas cosas que Python no permite. Si alguna vez ha recibido un SyntaxError al intentar ejecutar el código Python, entonces esta guía puede ayudarle. A lo largo de este tutorial, verá ejemplos comunes de sintaxis no válida en Python y aprender cómo resolver el problema.

Al final de este tutorial, podrás:

  • Identificar sintaxis no válida en Python
  • dar sentido a SyntaxError tracebacks sintaxis no válida
  • resolver o evitar por completo de experiencia

gratuito: 5 los pensamientos en el dominio de Python, un curso gratuito para los desarrolladores de Python que le muestra la hoja de ruta y la mentalidad que necesita para tomar sus habilidades de Python al siguiente nivel.

Sintaxis no válida en Python

Cuando se ejecuta el código Python, el intérprete primero analizarlo para convertirlo en Python código de bytes, que luego se ejecutará. La intérprete encontrará ninguna sintaxis no válida en Python durante esta primera etapa de la ejecución del programa, también conocido como la etapa de análisis . Si el intérprete no puede analizar el código Python con éxito, entonces esto significa que ha utilizado algún lugar sintaxis no válida en el código. El intérprete intentará mostrarle donde se produjo el error.

Cuando estás aprendiendo Python, por primera vez, puede ser frustrante para obtener una SyntaxError. Python intentará ayudarle a determinar dónde la sintaxis no válida está en su código, pero el rastreo que ofrece puede ser un poco confuso. A veces, el código al que apunta es perfectamente bien.

Nota: Si el código es sintácticamente correcta, entonces es posible obtener otras excepciones plantearon que no son un SyntaxError. Para aprender más sobre otras excepciones de Python y cómo manejarlos, echa un vistazo a excepciones Python: Una introducción.

Usted no puede manejar la sintaxis no válida en Python como otras excepciones. Incluso si se trató de envolver un try y except bloque de alrededor de código con una sintaxis no válida, todavía se vería el aumento intérprete de un SyntaxError.

SyntaxError Excepción y Rastreo

Cuando el intérprete se encuentra con una sintaxis no válida en el código Python, que provocará una excepción SyntaxError y proporcionar un rastreo con alguna información útil para ayudarle a depurar el error. Aquí hay un código que contiene una sintaxis no válida en Python:

1 # theofficefacts.py
2 ages = {
3 'pam': 24,
4 'jim': 24
5 'michael': 43
6 }
7 print(f'Michael is {ages["michael"]} years old.')

Se puede ver la sintaxis no válida en el diccionario literal en la línea 4. La segunda entrada, ‘Jim’, no se encuentra una coma. Si se trató de ejecutar este código tal y como son, entonces se obtendría el siguiente rastreo:

$ python theofficefacts.py
File "theofficefacts.py", line 5
'michael': 43
^
SyntaxError: invalid syntax

Tenga en cuenta que el mensaje de rastreo localiza el error en la línea 5, y no la línea 4. El intérprete de Python está tratando de señalar que la inválido sintaxis es. Sin embargo, sólo puede realmente apuntar a donde se notó por primera vez un problema. Cuando se obtiene un rastreo SyntaxError y el código que el rastreo está apuntando a ve bien, entonces usted querrá empezar a moverse hacia atrás a través del código hasta que se pueda determinar lo que está mal.

En el ejemplo anterior, no hay un problema de dejar a cabo una coma, dependiendo de lo que viene después de ella. Por ejemplo, no hay ningún problema con una coma faltante después de ‘Michael’ en la línea 5. Sin embargo, una vez que el intérprete encuentros algo que no tiene sentido, sólo puede apuntar a lo primero que se descubrió que no podía comprender.

Nota: Este tutorial asume que conoce los conceptos básicos de tracebacks de Python. Para obtener más información sobre el rastreo de Python y cómo leerlos, echa un vistazo a la comprensión de Rastreo Python.

Hay algunos elementos de un rastreo SyntaxError que puede ayudar a determinar dónde la sintaxis no válida está en su código:

  • El nombre de archivo en el que la sintaxis no válida se encontró
  • El número de línea y reproduce línea de código donde el tema se encontró
  • un símbolo de intercalación (^) en la línea debajo del código reproducido, lo que demuestra que el punto en el código que tiene un problema
  • el mensaje de error que se produce después de la SyntaxError tipo de excepción, que puede proporcionar información para ayudar a determinar el problema

En el ejemplo anterior, el nombre del archivo que se dio fue theofficefacts.py, el número de línea fue de 5, y el cursor se refirió a la cotización de cierre de la Michael clave de diccionario. El rastreo SyntaxError podría no señalar el problema real, pero apuntará al primer lugar en el que el intérprete no podía dar sentido a la sintaxis.

Hay otras dos excepciones que se pueden ver Python aumento. Estos son equivalentes a SyntaxError pero tienen diferentes nombres:

Estas excepciones tanto heredan de la clase SyntaxError, pero son casos especiales a la sangría. Un IndentationError se produce cuando los niveles de sangría de su código no coinciden. Un TabError se produce cuando el código utiliza ambas pestañas y espacios en el mismo archivo. Vas a echar un vistazo más de cerca a estas excepciones en una sección posterior.

Común Sintaxis Problemas

Cuando se encuentra con un SyntaxError por primera vez, es útil saber qué había un problema y lo que se podría hacer para arreglar la sintaxis no válida en el código Python. En las siguientes secciones, verá algunas de las razones más comunes que una SyntaxError podría ser elevada y cómo puede solucionarlos.

mal uso del operador de asignación (=)

Hay varios casos en Python, donde usted no es capaz de hacer asignaciones a objetos. Algunos ejemplos son la asignación de literales y llamadas a funciones. En el bloque de código a continuación, se puede ver algunos ejemplos que tratan de hacer esto y los resultantes tracebacks SyntaxError:

>>> len('hello') = 5
File "", line 1
SyntaxError: can't assign to function call

>>> 'foo' = 1
File "", line 1
SyntaxError: can't assign to literal

>>> 1 = 'foo'
File "", line 1
SyntaxError: can't assign to literal

el primer ejemplo intenta asignar el valor 5 a la llamada len (). El mensaje SyntaxError es muy útil en este caso. Te dice que no se puede asignar un valor a una llamada de función.

El segundo y tercer ejemplos tratan de asignar una cadena y un entero de literales. La misma regla se aplica a otros valores literales. Una vez más, los mensajes de seguimiento indican que el problema se produce cuando se intenta asignar un valor a un literal.

Nota: Los ejemplos anteriores están perdiendo la línea de código y repetida de intercalación (^) señalando el problema en el rastreo. La excepción y rastreo que vea serán diferentes cuando se está en el REPL vs intentar ejecutar el código desde un archivo. Si este código se encontraban en un archivo, a continuación, se obtendría la línea de código repetido y apuntando cursor al problema, como se vio en otros casos a través de este tutorial.

Es probable que su intención no es asignar un valor a un literal o una llamada a la función. Por ejemplo, esto puede ocurrir si se deja accidentalmente fuera del signo igual adicionales (=), que hiciera de esta asignación en una comparación. Una comparación, como se puede ver a continuación, sería válida:

>>> len('hello') == 5
True

mayoría de las veces, cuando Python le dice que usted está haciendo una asignación a algo que no se puede asignar a, primero puede ser que desee comprobar para asegurarse seguro que la declaración no debe ser una expresión booleana en su lugar. También puede encontrarse con este problema cuando usted está tratando de asignar un valor a una palabra clave Python, que usted cubrirá en la siguiente sección.

error ortográfico, falta o palabras clave El mal uso del pitón Palabras clave

Python son un conjunto de palabras protegida que tienen un significado especial en Python. Estas son palabras que no se puede utilizar como identificadores, variables o nombres de función en su código. Son una parte de la lengua y sólo se pueden utilizar en el contexto que permite Python.

Hay tres formas comunes que, por error, puede utilizar palabras clave:

Si misspell una palabra clave en su código Python, entonces obtendrá un SyntaxError. Por ejemplo, esto es lo que sucede si se escribe la palabra clave de forma incorrecta:

>>> fro i in range(10):
File "", line 1
fro i in range(10):
^
SyntaxError: invalid syntax

El mensaje dice SyntaxError: sintaxis no válida, pero eso no es muy útil. Los puntos de rastreo en el primer lugar donde Python podría detectar que algo estaba mal. Para solucionar este tipo de error, asegúrese de que todas las palabras clave de Python están escritas correctamente.

Otro problema común con las palabras clave es cuando se pierda por completo :

>>> for i range(10):
File "", line 1
for i range(10):
^
SyntaxError: invalid syntax

Una vez más, el mensaje de excepción no es tan útil, pero el rastreo sí trata de apuntar en la dirección correcta. Si usted se mueve hacia atrás desde el símbolo de intercalación, a continuación, se puede ver que la palabra clave en falta en la sintaxis de bucle.

También puede mal uso una palabra clave Python protegida. Recuerde, las palabras clave sólo se permiten para ser utilizado en situaciones específicas. Si se utilizan de forma incorrecta, entonces usted tendrá una sintaxis no válida en el código Python. Un ejemplo común de esto es el uso de continuar o romper fuera de un bucle. Esto puede ocurrir fácilmente durante el desarrollo cuando se está implementando cosas y pasan a moverse fuera de la lógica de un bucle:

>>> names = ['pam', 'jim', 'michael']
>>> if 'jim' in names:
... print('jim found')
... break
...
File "", line 3
SyntaxError: 'break' outside loop

>>> if 'jim' in names:
... print('jim found')
... continue
...
File "", line 3
SyntaxError: 'continue' not properly in loop

Aquí, Python hace un gran trabajo de decirle exactamente lo que está mal. Los mensajes » ‘break’ bucle exterior» y » ‘continúan’ no correctamente en bucle» ayuda a determinar exactamente qué hacer. Si este código se encontraban en un archivo, a continuación, Python también tendría el cursor hacia la derecha apuntando a la palabra clave mal uso.

Otro ejemplo es si se intenta asignar una palabra clave Python a una variable o utiliza una palabra clave para definir una función:

>>> pass = True
File "", line 1
pass = True
^
SyntaxError: invalid syntax

>>> def pass():
File "", line 1
def pass():
^
SyntaxError: invalid syntax

Cuando se intenta asignar un valor a pasar, o cuando se intenta definir una nueva función llamada pase, obtendrá un SyntaxError y vea el mensaje «sintaxis no válida» de nuevo.

Puede ser que sea un poco más difícil de resolver este tipo de sintaxis no válida en el código Python porque el código se ve bien desde el exterior. Si su apariencia código bueno, pero todavía estás recibiendo un SyntaxError, entonces usted podría considerar la posibilidad de comprobar el nombre de la variable o nombre de función que desea utilizar en contra de la lista de palabras clave para la versión de Python que está utilizando.

La lista de palabras clave protegidas ha cambiado con cada nueva versión de Python. Por ejemplo, en Python 3.6 se puede utilizar esperan en un nombre de variable o nombre de función, pero a partir de Python 3.7, esa palabra se ha agregado a la lista de palabras clave. Ahora bien, si se intenta utilizar esperan en un nombre de variable o función, esto hará que un SyntaxError si su código es para Python 3.7 o posterior.

Otro ejemplo de esto es la impresión, que difiere en Python 2 vs Python 3:

impresión es una palabra clave en Python 2, por lo que no se puede asignar un valor a la misma. En Python 3, sin embargo, es una función incorporada que se pueden asignar valores.

Puede ejecutar el siguiente código para ver la lista de palabras clave en cualquier versión de Python que esté ejecutando:

import keyword
print(keyword.kwlist)

palabras clave también proporciona la keyword.iskeyword útil (). Si sólo necesita una forma rápida de comprobar la variable pase, a continuación, puede utilizar el siguiente de una sola línea:

>>> import keyword; keyword.iskeyword('pass')
True

Este código le dirá rápidamente si el identificador que usted está tratando de uso es una palabra clave o no.

Missing paréntesis, corchetes y Cotizaciones

A menudo, la causa de la sintaxis no válida en el código Python es un paréntesis de cierre, el soporte o la cita perdida o no coincidentes. Estos pueden ser difíciles de detectar en muy largas filas de paréntesis anidados o bloques de varias líneas más largas. Usted puede detectar frases coincidentes o perdidos con la ayuda de los rastreos de Python:

>>> message = 'don't'
File "", line 1
message = 'don't'
^
SyntaxError: invalid syntax

Aquí, los puntos de rastreo al código nulo, cuando hay un t’ después de una comilla de cierre. Para solucionar este problema, puede hacer uno de dos cambios:

Otro error común es que se olvide de cerrar la cadena. Con las dos cadenas entre comillas dobles y entre comillas simples, la situación y rastreo son los mismos:

>>> message = "This is an unclosed string
File "", line 1
message = "This is an unclosed string
^
SyntaxError: EOL while scanning string literal

Esta vez, el símbolo de intercalación en los puntos de rastreo derecho al código de problema. El mensaje SyntaxError, «EOL durante la exploración de literal de cadena», es un poco más específico y útil para determinar el problema. Esto significa que el intérprete de Python ya ha recibido al final de una línea (EOL) antes de una cuerda al aire se cerró. Para solucionar este problema, cerca de la cadena con una cita que coincide con la que utilizó para iniciarlo. En este caso, eso sería una comilla doble ( «) Cotizaciones

que faltan de sentencias dentro de un F-secuencia también puede conducir a una sintaxis no válida en Python:.

1 # theofficefacts.py
2 ages = {
3 'pam': 24,
4 'jim': 24,
5 'michael': 43
6 }
7 print(f'Michael is {ages["michael]} years old.')

Aquí, la referencia a las edades dentro del diccionario de f- impresa secuencia falta las comillas de cierre de la referencia clave el rastreo resultante es la siguiente:..

$ python theofficefacts.py
File "theofficefacts.py", line 7
print(f'Michael is {ages["michael]} years old.')
^
SyntaxError: f-string: unterminated string

Python identifica el problema y le indica que existe dentro de la F-string el mensaje «cadena incompleta» indica también cuál es el problema . el símbolo de intercalación en este caso sólo puntos al comienzo de la F-cadena.

esto podría no ser tan útil como cuando los puntos de intercalación al área del problema de la F-string, pero sí reducir dónde tiene que ver . Hay un algún lugar cadena incompleta dentro de esa f-cadena. Sólo tienes que averiguar dónde. para solucionar este problema, asegúrese de que todas las cotizaciones y los soportes f cuerdas internas están presentes.

la situación es casi idéntica a falta parenthe ses y los soportes. Si se omite el corchete de cierre de una lista, por ejemplo, entonces se dará cuenta de que Python y señalarlo. Hay algunas variaciones de esto, sin embargo. La primera es dejar el corchete de cierre fuera de la lista:

# missing.py
def foo():
return [1, 2, 3

print(foo())

Cuando se ejecuta este código, se le dijo que hay un problema con la llamada a imprimir ():

$ python missing.py
File "missing.py", line 5
print(foo())
^
SyntaxError: invalid syntax

lo que pasa aquí es que Python cree que el lista contiene tres elementos: 1, 2, y 3 de impresión (foo ()). Python usa el espacio en blanco para agrupar las cosas lógicamente, y porque no hay ninguna coma o soporte de separación 3 de impresión (foo ()), Python mezcla ambos conceptos como el tercer elemento de la lista.

Otra variante consiste en añadir una coma final después de que el último elemento de la lista al mismo tiempo dejan fuera del corchete de cierre:

# missing.py
def foo():
return [1, 2, 3,

print(foo())

Ahora se obtiene un rastreo diferente:

$ python missing.py
File "missing.py", line 6

^
SyntaxError: unexpected EOF while parsing

En el ejemplo anterior, 3 y de impresión (foo ( )) se agrupan como un elemento más, pero aquí se ve una coma que separa los dos. Ahora, la llamada va a imprimir (foo ()) se agrega como el cuarto elemento de la lista, y Python llega al final del archivo sin el corchete de cierre. El rastreo le dice que Python llegó al final del archivo (EOF), pero esperaba algo más.

En este ejemplo, Python esperaba un corchete de cierre (]), pero la línea repetida y símbolo de intercalación no son muy útiles. Faltan paréntesis y corchetes son difíciles para Python para identificar. A veces, lo único que puede hacer es empezar desde el cursor y mover hacia atrás hasta que pueda identificar lo que falta o mal.

confundir Diccionario Sintaxis

que vimos antes de que usted podría conseguir un SyntaxError si deja la coma fuera de un elemento de diccionario. Otra forma de sintaxis no válida con diccionarios de Python es el uso del signo igual (=) para las claves y valores separados, en lugar de los dos puntos:

>>> ages = {'pam'=24}
File "", line 1
ages = {'pam'=24}
^
SyntaxError: invalid syntax

Una vez más, este mensaje de error no es muy útil. La línea repetida y símbolo de intercalación, sin embargo, son muy útiles! Están apuntando a la derecha al carácter problema.

Este tipo de problema es común si usted confunde la sintaxis de Python con la de otros lenguajes de programación. También verá esto si usted confunde el acto de definir un diccionario con un llamado dict (). Para solucionar esto, se podía sustituir el signo igual con dos puntos. También puede cambiar al uso de dict ():

>>> ages = dict(pam=24)
>>> ages
{'pam': 24}

Puede utilizar dict () para definir el diccionario si es que la sintaxis es más útil.

Uso de la sangría incorrecto

Hay dos subclases de SyntaxError que tienen que ver con problemas de sangrado en concreto:

Mientras que otros lenguajes de programación utilizan llaves para indicar bloques de código, los usos del pitón de espacio en blanco. Eso significa que Python espera que el espacio en blanco en el código para comportarse predecible. Se levantará un IndentationError si hay una línea en un bloque de código que tiene el número incorrecto de espacios:

1 # indentation.py
2 def foo():
3 for i in range(10):
4 print(i)
5 print('done')
6
7 foo()

Esto puede ser difícil de ver, pero la línea 5 únicamente se sangra 2 espacios. Debe estar en línea con la declaración de bucle, que es de 4 espacios terminado. Afortunadamente, Python puede detectar esto fácilmente y rápidamente le dirá cuál es el problema.

También hay un poco de ambigüedad, sin embargo. Es la impresión ( ‘hecho’) de la línea destinada a ser después el bloque de bucle para el bucle o dentro del para? Cuando se ejecuta el código anterior, verá el siguiente error:

$ python indentation.py
File "indentation.py", line 5
print('done')
^
IndentationError: unindent does not match any outer indentation level

pesar de que el rastreo se parece mucho a la de rastreo SyntaxError, en realidad es un IndentationError. El mensaje de error también es muy útil. Se da a conocer que el nivel de sangría de la línea no coincide con ningún otro nivel de sangría. En otras palabras, print ( ‘hecho’) se sangra 2 plazas, pero Python no puede encontrar ninguna otra línea de código que coincida con este nivel de sangrado. Puedes solucionar este problema rápidamente, haciendo que las líneas de código con el nivel de sangrado esperado.

El otro tipo de SyntaxError es la TabError , que verá cada vez que hay una línea que contiene cualquiera de las pestañas o espacios para su sangría, mientras que el resto del archivo contiene la otra. Esto podría ir ocultos hasta que Python lo señala a usted!

Si el tamaño de la pestaña es la misma anchura que el número de plazas en cada nivel de sangría, a continuación, puede parecer que todas las líneas están en el mismo nivel. Sin embargo, si una línea tiene sangría utilizando espacios y el otro se sangra con pestañas, a continuación, Python señalar esto como un problema:

1 # indentation.py
2 def foo():
3 for i in range(10):
4 print(i)
5 print('done')
6
7 foo()

Aquí, la línea 5 se sangra con una pestaña en lugar de 4 espacios. Este bloque de código se podría mirar perfectamente muy bien a usted, o podría parecer errado, dependiendo de la configuración del sistema.

Python, sin embargo, se dará cuenta el problema de inmediato. Pero antes de ejecutar el código para ver qué Python le dirá que está mal, podría ser útil para que usted vea un ejemplo de lo que las miradas de código como bajo diferentes configuraciones de tamaño de la pestaña:

$ tabs 4 # Sets the shell tab width to 4 spaces
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()

$ tabs 8 # Sets the shell tab width to 8 spaces (standard)
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()

$ tabs 3 # Sets the shell tab width to 3 spaces
$ cat -n indentation.py
1 # indentation.py
2 def foo():
3 for i in range(10)
4 print(i)
5 print('done')
6
7 foo()

notar la diferencia en pantalla entre los tres ejemplos encima. La mayor parte del código utiliza 4 espacios para cada nivel de sangría, pero la línea 5 utiliza una sola pestaña en los tres ejemplos. El ancho de la ficha cambia, basado en la pestaña ancho de ajuste :

  • Si la pestaña de ancho es 4, entonces la declaración de impresión se verá como está fuera del bucle. La consola se imprimirá ‘hecho’ al final del bucle.
  • Si el tamaño de la pestaña es de 8, que es estándar para una gran cantidad de sistemas, entonces la declaración impresión parecerá como si fuera dentro del bucle. La consola se imprimirá ‘hecho’ después de cada número.
  • Si la ficha anchura es 3, entonces la declaración de impresión parece fuera de lugar. En este caso, la línea 5 no coincide con ningún nivel de sangría.

Cuando se ejecuta el código, obtendrá el siguiente error y rastreo:

$ python indentation.py
File "indentation.py", line 5
print('done')
^
TabError: inconsistent use of tabs and spaces in indentation

Aviso del TabError en lugar de la habitual SyntaxError. Python señala la línea problema y le da un mensaje de error útiles. Se da a conocer claramente que hay una mezcla de tabuladores y espacios utilizados para el sangrado en el mismo archivo.

La solución a esto es hacer que todas las líneas en el mismo archivo de código Python uso en fichas o espacios, pero no ambos. Para los bloques de código anteriores, la solución sería de quitar el precinto y reemplazarlo con 4 espacios, que se imprimirán ‘hecho’ después de que el bucle for ha terminado.

Definición y funciones de llamada

usted podría encontrarse con una sintaxis no válida en Python cuando se está definiendo o llamar a las funciones. Por ejemplo, verá un SyntaxError si se utiliza un punto y coma en lugar de dos puntos al final de una definición de función:

>>> def fun();
File "", line 1
def fun();
^
SyntaxError: invalid syntax

El rastreo aquí es muy útil, con el cursor hacia la derecha apuntando al carácter problema. Puede aclarar esta sintaxis no válida en Python al cambiar el punto y coma por dos puntos.

Además, palabra clave argumentos tanto en la definición de funciones y llamadas a funciones necesitan estar en el orden correcto. argumentos clave siempre vienen después argumentos posicionales. Si no se utiliza este orden dará lugar a una SyntaxError:

>>> def fun(a, b):
... print(a, b)
...
>>> fun(a=1, 2)
File "", line 1
SyntaxError: positional argument follows keyword argument

Aquí, una vez más, el mensaje de error es muy útil en la que le dice exactamente lo que está mal en la línea.

Cambio de Python Versiones

A veces, el código que funciona perfectamente bien en una versión de Python se rompe en una nueva versión. Esto se debe a los cambios oficiales en la sintaxis del lenguaje. El ejemplo más conocido de esto es la declaración de impresión, que pasó de una palabra clave en Python 2 a una función incorporada en Python 3:

>>> # Valid Python 2 syntax that fails in Python 3
>>> print 'hello'
File "", line 1
print 'hello'
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello')?

Este es uno de los ejemplos en los que el mensaje de error se proporciona con el SyntaxError brilla! No sólo se le diga que se está perdiendo paréntesis en la llamada impresión, sino que también proporciona el código correcto para ayudar a solucionar el comunicado.

Otro problema que se puede encontrar es cuando se está leyendo o aprendiendo sobre la sintaxis que es una sintaxis válida en una nueva versión de Python, pero no es válido en la versión que está escribiendo en. Un ejemplo de esto es el f-string la sintaxis, que no existe en las versiones de Python antes de 3.6: versiones

>>> # Any version of python before 3.6 including 2.7
>>> w ='world'
>>> print(f'hello, {w}')
File "", line 1
print(f'hello, {w}')
^
SyntaxError: invalid syntax

en Python antes de 3.6, el intérprete no sabe nada acerca de la sintaxis f-cuerda y sólo va a proporcionar un mensaje genérico «sintaxis no válida». El problema, en este caso, es que el código se ve perfectamente bien, pero fue ejecutado con una versión anterior de Python. En caso de duda, una doble comprobación de la versión de Python que se está ejecutando! sintaxis

Python sigue evolucionando, y hay algunas nuevas características interesantes introducidas en Python 3.8: operador

  • morsa (expresiones de asignación) sintaxis
  • F-cadena para la depuración
  • posicional-únicos argumentos

Si desea a probar algunas de estas nuevas características, entonces usted necesita para asegurarse de que está trabajando en un entorno de 3,8 Python. De lo contrario, obtendrá un SyntaxError.

Python 3.8 también proporciona la nueva SyntaxWarning . Usted verá esta advertencia en situaciones en las que la sintaxis es válida, pero todavía parece sospechoso. Un ejemplo de esto sería si se echa en falta una coma entre dos tuplas en una lista. Esto sería una sintaxis válida en las versiones de Python 3.8 antes, pero el código levantaría un TypeError debido a una tupla no es exigible: medio

>>> [(1,2)(2,3)]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object is not callable

este TypeError que no se puede llamar una tupla como una función, que es lo que el intérprete de Python estás haciendo.

En Python 3.8, este código sigue planteando la TypeError, pero ahora también se verá un SyntaxWarning que indica cómo se puede ir sobre la fijación del problema:

>>> [(1,2)(2,3)]
:1: SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object is not callable

El mensaje que acompaña a la nueva útiles SyntaxWarning incluso proporciona una pista ( «tal vez se ha perdido una coma? «) para señalarle en la dirección correcta!

Conclusión

En este tutorial, usted ha visto la información que el rastreo SyntaxError le da. También ha visto muchos ejemplos comunes de sintaxis no válida en Python y lo que son las soluciones a esos problemas. Esto no sólo acelera el flujo de trabajo, sino que también le hará un revisor de código más atento!

Cuando estás escribiendo código, trate de usar un IDE que entiende la sintaxis de Python y proporciona retroalimentación. Si pones muchos de los ejemplos de código Python no válidas de este tutorial en un buen IDE, entonces se debe poner de relieve las líneas de problemas incluso antes de llegar a ejecutar su código.

Conseguir un SyntaxError mientras estás aprendiendo Python puede ser frustrante, pero ahora ya sabes cómo entender mensajes de seguimiento y formas de sintaxis no válida en Python es posible llegar en contra de lo. La próxima vez que reciba una SyntaxError , usted estará mejor equipado para solucionar el problema rápidamente!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *