Menu
Coddy logo textTech

Cos'è un runtime error (errore di runtime)?

Un errore di runtime (runtime error) è un errore che si verifica mentre il programma è in esecuzione, quando un'operazione non si può eseguire con i valori che ha, come dividere per zero o leggere oltre la fine di una lista. Il programma si ferma a quella riga, a meno che l'errore non venga gestito.

Di Kevin Spektor, Cofondatore e CTO

Aggiornato il 24 settembre 2026

Un errore di runtime aspetta che il programma sia già in esecuzione. Il codice supera tutti i controlli prima di partire, funziona bene per un po' e poi arriva a un'operazione che non si può eseguire con i valori che ha in quel momento. Questa funzione funziona con una lista e fallisce con un'altra:

85.0
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    print(average([]))
          ^^^^^^^^^^^
  File "main.py", line 2, in average
    return sum(scores) / len(scores)
           ~~~~~~~~~~~~^~~~~~~~~~~~~
ZeroDivisionError: division by zero

La prima chiamata stampa 85.0. La seconda passa una lista vuota, quindi len(scores) vale 0 e la divisione non si può fare. La grammatica era corretta, quindi non è un errore di sintassi. Il problema esiste solo con certi dati, ed è per questo che un errore di runtime può comparire dopo che un programma ha funzionato bene cento volte.

Cosa succede quando si verifica un errore di runtime

  1. Il programma arriva a un'operazione, qui sum(scores) / len(scores).
  2. Il runtime la controlla prima di eseguirla. CPython verifica il divisore prima di dividere, la JVM controlla ogni indice di un array e Python controlla che una chiave di dizionario esista prima di restituirne il valore.
  3. Il controllo fallisce, quindi il runtime crea un oggetto errore. In Python e Java questo oggetto è un'eccezione, e registra il tipo di errore, un messaggio e il punto in cui è avvenuto.
  4. Il runtime cerca del codice che gestisca quel tipo di errore, prima nella funzione corrente, poi nella funzione che l'ha chiamata, e così via verso l'esterno.
  5. Se niente lo gestisce, il programma si ferma. Python stampa un traceback ed esce con codice di uscita 1. Java stampa uno stack trace che inizia con Exception in thread "main".

I linguaggi senza questi controlli si comportano in modo diverso. Il C non controlla gli indici degli array né i puntatori, quindi un accesso sbagliato alla memoria o corrompe i dati in silenzio o fa sì che il sistema operativo chiuda il programma con un segmentation fault.

Tutto quello che il programma ha fatto prima della riga che fallisce è già avvenuto. Questo ciclo stampa tre colori prima di fallire sul quarto:

red
green
blue
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    print(colors[i])
          ~~~~~~^^^
IndexError: list index out of range

Come leggere un traceback

Un traceback di Python si legge dal basso verso l'alto. L'ultima riga indica il tipo di errore e il messaggio: ZeroDivisionError: division by zero. Le righe sopra mostrano la catena di chiamate, dalla più vecchia alla più recente. Nel primo esempio, la riga 5 ha chiamato average, e la riga 2, dentro average, è quella in cui la divisione è fallita.

La riga in cui è avvenuto l'errore non è sempre quella da modificare. La riga 2 di average è corretta. La vera domanda è come ci sia arrivata una lista vuota, quindi segui il valore sbagliato fino alla sua origine e correggilo lì. Quando un traceback passa per file di librerie che non hai scritto tu, cerca l'ultima riga che punta al tuo file.

Errori di runtime comuni

Ognuno di questi messaggi è copiato da Python 3.12.

ErroreEsempioMessaggio
ZeroDivisionError10 / 0division by zero
IndexError["red", "green", "blue"][3]list index out of range
KeyError{"theme": "dark"}["font"]'font'
ValueErrorint("twenty")invalid literal for int() with base 10: 'twenty'
TypeError"Total: " + 5can only concatenate str (not "int") to str
AttributeErrorchiamare .upper() su None'NoneType' object has no attribute 'upper'
FileNotFoundErroropen("missing.txt")[Errno 2] No such file or directory: 'missing.txt'
RecursionErroruna funzione che chiama sé stessa all'infinitomaximum recursion depth exceeded

Java ha equivalenti diretti, come ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException e NullPointerException. Una divisione intera per zero che nessuno cattura stampa questo in Java:

Exception in thread "main" java.lang.ArithmeticException: / by zero

JavaScript è più tollerante con i numeri: 10 / 0 vale Infinity, non è un errore. Fallisce quando usi un valore che non c'è. Node.js stampa questo per user.name quando user è undefined:

TypeError: Cannot read properties of undefined (reading 'name')

Come correggere un errore di runtime

  1. Riproducilo. Esegui di nuovo il programma con lo stesso input e verifica di ottenere lo stesso errore.
  2. Leggi l'ultima riga del traceback, poi trova la riga corrispondente nel tuo codice.
  3. Guarda i valori coinvolti. Stampali subito prima della riga che fallisce, oppure fermati lì con un breakpoint del debugger.
  4. Correggi la causa. Sistema l'indice, gestisci il caso speciale o valida l'input prima di usarlo.

Per la funzione average, la soluzione è decidere quanto deve valere la media quando non ci sono punteggi e scriverlo nel codice:

85.0
0

Alcuni errori non dipendono da te: un file che è stato cancellato, una rete che va in timeout, un utente che scrive lettere dove serve un numero. Non puoi evitarli correggendo il codice, quindi li catturi con la gestione delle eccezioni e decidi cosa fa il programma dopo. Quello che non devi fare è avvolgere un bug in un try e nasconderlo. Un IndexError causato da un ciclo che conta un passo di troppo è un errore da correggere, non da catturare.

Messaggi di runtime error su Windows e in Excel

Il termine compare anche fuori dal tuo codice. Una finestra di Windows intitolata Microsoft Visual C++ Runtime Library con la scritta Runtime Error! significa che un programma scritto in C++ ha avuto un errore fatale e il runtime del C++ lo ha chiuso. Da utente non puoi modificare quel codice, quindi i rimedi più comuni sono aggiornare il programma, riparare o reinstallare i pacchetti Microsoft Visual C++ Redistributable e, per i giochi, aggiornare il driver della scheda video.

Le macro di Excel scritte in VBA segnalano errori di runtime numerati. Run-time error '9': Subscript out of range significa che la macro ha chiesto un foglio o un elemento di un array che non esiste, e Run-time error '1004' è un errore generico che si verifica quando fallisce un'operazione su una cartella di lavoro, un foglio o un intervallo. L'idea è la stessa di Python: codice valido che ha incontrato un valore che non riusciva a gestire.

Cosa leggere dopo

Gli errori di runtime hanno due fratelli: l'errore di sintassi, trovato prima che il programma parta, e l'errore logico, che non produce mai nessun messaggio. Per far sì che il programma si riprenda dagli errori di runtime invece di andare in crash, leggi la pagina sulla gestione delle eccezioni e poi le guide di Python sulle eccezioni e sul debug degli errori. Il corso Python ti fa scrivere e correggere codice come questo in ogni lezione.

Domande frequenti

Che differenza c'è tra un errore di runtime e un errore di sintassi?
Un errore di sintassi viene trovato prima che il programma parta, perché il codice viola la grammatica del linguaggio, quindi non viene eseguita nessuna riga. Un errore di runtime si verifica dopo, mentre il programma è in esecuzione, quando una riga valida incontra un valore che non riesce a gestire. Tutte le righe precedenti sono già state eseguite e possono aver stampato qualcosa.
Perché continuo a ricevere errori di runtime?
Di solito perché il codice dà per scontato qualcosa sui dati che non è sempre vero: che una lista non sia mai vuota, che un file esista, che l'utente scriva un numero. Ogni supposizione funziona con gli input che hai provato e fallisce con uno che non hai provato. Prova con input vuoti, zero, mancanti e molto grandi, e controlla o gestisci questi casi in modo esplicito.
Cosa significa Runtime Error su LeetCode?
Significa che la tua soluzione è stata compilata ma è andata in crash su almeno un caso di test. Le cause più comuni sono un indice fuori intervallo, una divisione per zero, l'uso di un valore null o None, oppure una ricorsione così profonda da far traboccare lo stack. Esegui tu stesso l'input che fallisce, mostrato nella pagina dei risultati, e controlla i casi limite: un array vuoto, un solo elemento e la dimensione massima consentita.
Un errore di runtime è la stessa cosa di un'eccezione?
Non proprio. In Python e Java la maggior parte degli errori di runtime viene segnalata come eccezione, ed è questo che permette al programma di catturarli. Ma linguaggi come il C hanno errori di runtime e nessuna eccezione. In Java, RuntimeException è anche il nome di una famiglia specifica di eccezioni, quelle non controllate come NullPointerException.
Un compilatore può individuare gli errori di runtime?
Solo alcuni. Un compilatore o un type checker come mypy può dimostrare che certi errori sono impossibili, per esempio sommare del testo a un numero. Ma non può conoscere i valori che arrivano mentre il programma gira, come un numero digitato dall'utente che risulta essere zero. Questi errori si scoprono solo eseguendo il codice, oppure si gestiscono controllando l'input.
Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA