Cos'è un errore di sintassi (syntax error)?
Un errore di sintassi è uno sbaglio nella struttura del codice, come i due punti, una parentesi o delle virgolette mancanti, che viola le regole grammaticali di un linguaggio di programmazione. Il compilatore o l'interprete rifiuta il programma prima che ne venga eseguita qualsiasi parte.
Aggiornato il 24 settembre 2026
Prima di eseguire anche una sola riga del tuo programma, Python legge l'intero file e controlla che segua la grammatica del linguaggio. Se una riga viola quella grammatica, non viene eseguito niente. Esegui questo programma e osserva cosa non succede: il primo print non stampa mai.
File "main.py", line 4
if temperature > 30
^
SyntaxError: expected ':'
La riga 1 è perfettamente valida, eppure "Checking the temperature" non compare nell'output. Python ha rifiutato il file intero perché una riga if deve terminare con i due punti. Aggiungi il : dopo 30, eseguilo di nuovo e vengono stampate entrambe le righe.
Come viene individuato un errore di sintassi
Ogni linguaggio di programmazione ha una grammatica: quali parole sono ammesse, dove si aprono e si chiudono le parentesi, cosa deve seguire if. Il programma che la controlla si chiama parser (analizzatore sintattico) e lavora nella prima fase del processo che trasforma il codice sorgente in qualcosa che una macchina può eseguire.
- Il tokenizer divide il testo in token:
if,temperature,>,30e così via. - Il parser legge i token in ordine e cerca di farli corrispondere alla grammatica. Dopo
if temperature > 30si aspetta un:, ma trova la fine della riga. - Si ferma e segnala il punto in cui si è bloccato: il file, il numero di riga e un accento circonflesso (
^) sotto la posizione. - Visto che l'analisi è fallita, non viene generato codice, quindi non viene eseguita nessuna riga del programma.
In CPython il parser gira ogni volta che avvii uno script. Nei linguaggi con una fase di build separata, questo controllo lo fa il compilatore: gcc, clang e javac si rifiutano di produrre un programma finché resta anche un solo errore di sintassi. Per questo gli errori di sintassi rientrano tra gli errori di compilazione, a differenza di un errore di runtime, che si verifica quando il programma è già in esecuzione.
Errori di sintassi comuni in Python
Questi sono gli sbagli dietro la maggior parte degli errori di sintassi che vede chi inizia, con il messaggio esatto che stampa Python 3.12.
| Codice | Messaggio | Soluzione |
|---|---|---|
if x > 3 | SyntaxError: expected ':' | Termina le righe if, for, while, def e class con : |
print("Hi" | SyntaxError: '(' was never closed | Chiudi ogni parentesi che apri |
name = "Ada | SyntaxError: unterminated string literal (detected at line 1) | Chiudi le virgolette |
if x = 5: | SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? | Confronta con == |
print "Hi" | SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? | Python 3 richiede print(...) |
if a > 0 && b > 0: | SyntaxError: invalid syntax | Python usa and, or e not |
Un if senza nessuna riga indentata sotto | IndentationError: expected an indented block after 'if' statement on line 1 | Indenta il corpo con quattro spazi |
IndentationError è un tipo di SyntaxError: in Python l'indentazione fa parte della grammatica.
Non tutti gli errori di battitura sono errori di sintassi. pritn("hello") segue perfettamente la grammatica, perché un nome seguito da parentesi è una chiamata di funzione. Python scopre che non esiste nessuna funzione chiamata pritn solo quando arriva a quella riga, e allora solleva NameError: name 'pritn' is not defined. Did you mean: 'print'?. Questo è un errore di runtime, e le righe precedenti sono già state eseguite.
Perché la riga segnalata può essere sbagliata
Il parser segnala il punto in cui non è più riuscito ad andare avanti, che non sempre coincide con il punto in cui si trova lo sbaglio. Una parentesi quadra non chiusa è il caso classico: il parser non può sapere che la parentesi non è mai stata chiusa finché non ha letto oltre il punto in cui avrebbe dovuto esserlo.
File "main.py", line 1
prices = [4.50, 3.20, 7.80
^
SyntaxError: '[' was never closed
Python 3.10 e successivi indicano la [ di apertura alla riga 1. Python 3.9 e precedenti segnalavano solo invalid syntax alla riga 2, quella dopo lo sbaglio vero. Quindi, quando la riga segnalata sembra corretta, controlla la fine della riga precedente.
Anche gli altri parser si comportano così. Davanti a SELECT name FORM users;, con FROM scritto male, SQLite interpreta FORM come un alias (un secondo nome) della colonna name e fallisce solo una parola dopo:
Parse error near line 1: near "users": syntax error
SELECT name FORM users;
^--- error here
Errori di sintassi in C, Java e JavaScript
I linguaggi compilati segnalano gli errori di sintassi quando compili, non quando esegui. Ecco una dichiarazione senza il suo punto e virgola, compilata con Clang (il compilatore che il comando gcc esegue su macOS):
#include <stdio.h>
int main(void) {
int count = 3
printf("%d\n", count);
return 0;
}
main.c:4:18: error: expected ';' at end of declaration
javac segnala lo stesso sbaglio in Java come error: ';' expected, e non viene scritto nessun file .class. In C, una sola graffa mancante può produrre una dozzina di errori più in basso nel file. Correggi il primo e ricompila, perché gli altri spesso ne sono una conseguenza.
I motori JavaScript come V8 analizzano uno script intero prima di eseguirlo, proprio come Python. Node.js rifiuta questo file prima di stampare "start":
console.log("start");
if (x > 1 {
console.log("big");
}
SyntaxError: Unexpected token '{'
In un browser, un errore di sintassi impedisce l'esecuzione di quel singolo file di script, mentre gli altri script della pagina continuano a funzionare.
Come correggere un errore di sintassi
- Leggi prima l'ultima riga del messaggio. Indica il problema: un
:mancante, una(non chiusa, un token inatteso. - Vai alla riga segnalata e guarda l'accento circonflesso. Se la riga sembra a posto, controlla quella precedente.
- Controlla le coppie. Ogni
(,[,{e ogni virgoletta ha bisogno della sua coppia. La maggior parte degli editor evidenzia la parentesi corrispondente quando il cursore è accanto a una. - Controlla la punteggiatura che il linguaggio richiede: due punti e indentazione in Python, punto e virgola e graffe in C, Java e JavaScript.
- Correggi solo il primo errore, poi esegui di nuovo. I messaggi successivi sono spesso causati dal primo.
- Osserva l'evidenziazione della sintassi. Dopo una virgoletta non chiusa, il resto del file di solito prende il colore delle stringhe, e questo ti mostra dove è iniziato il problema.
La buona notizia è che gli errori di sintassi sono i più facili da correggere: lo strumento ti dice che qualcosa non va e più o meno dove. Gli errori più difficili arrivano dopo, quando il codice viene eseguito.
Cosa leggere dopo
Un programma che supera il parser può comunque andare in crash mentre gira, e questo è un errore di runtime. Un programma che arriva fino in fondo ma stampa una risposta sbagliata ha un errore logico, e quella pagina confronta i tre tipi in un'unica tabella. Per le regole grammaticali vere e proprie, leggi la sintassi di Python o la sintassi del C, e mettile in pratica nel corso Python.
Domande frequenti
Qual è un esempio di errore di sintassi?
print("Hello" è un errore di sintassi, e lo è anche una riga if senza i due punti in Python: if x > 3. In C e Java il più frequente è un punto e virgola mancante alla fine di un'istruzione. In tutti i casi il codice non segue la grammatica, quindi non può essere eseguito.Che differenza c'è tra un errore di sintassi e un errore semantico?
int in Java; altri lo usano come sinonimo di errore logico.Cos'è un errore di sintassi in C?
gcc e clang mostrano il file, la riga e la colonna, per esempio main.c:4:18: error: expected ';' at end of declaration, e non producono nessun eseguibile finché non correggi tutti gli errori.Perché Python non corregge da solo gli errori di sintassi?
Did you mean print(...)?, ma lasciano a te la decisione.Cosa significa errore di sintassi sulla calcolatrice?
ERR:SYNTAX.