SyntaxError: cuando Python no puede interpretar la estructura del código
Python detecta una combinación de símbolos que no encaja con la gramática del lenguaje. El lugar marcado es donde dejó de poder continuar, no siempre donde empezó el problema.
Lee el caret como una pista, no como un veredicto
En muchos mensajes de SyntaxError, Python muestra una línea y un símbolo ^. Ese caret señala el punto donde el parser ya no pudo construir una instrucción válida. Si falta una comilla o un paréntesis antes, la marca puede aparecer más tarde.
if edad >= 18
print("adulto")if, for, while, def, class, try o similares, revisa si falta :.Tres causas que merecen revisarse primero
Delimitador abierto
Una comilla, paréntesis, corchete o llave sin cerrar puede hacer que el error se señale una o varias líneas después.
Estructura incompleta
Dos puntos ausentes, operadores mal colocados o palabras clave en una posición imposible impiden formar la instrucción.
Sintaxis de otra versión
Una característica reciente puede fallar si ejecutas el código con una versión de Python anterior a la que la introdujo.
La línea anterior también puede ser culpable
mensaje = ("Hola"
print(mensaje)El print puede quedar marcado aunque el origen sea el paréntesis abierto en la asignación. Cuando una línea parece correcta, retrocede hasta la última estructura que abrió algo.
Practica encontrando el punto de ruptura
Antes de ejecutar, localiza el defecto en estos tres casos: un if sin dos puntos, una cadena sin comilla final y una llamada con paréntesis abierto. Después corrige solo el símbolo que hace falta.
Referencia técnica: documentación oficial de excepciones de Python.