In informatica, il termine eccezione è usato per descrivere l'occorrenza di diversi tipi di condizioni o eventi che alterano il normale flusso di controllo ed esecuzione di un microprocessore programmabile o di un programma. Possono essere considerati simili a degli errori a run-time da parte di un programma eseguito dal processore.

Descrizione Eccezioni hardware Tradizionalmente, il termine si applica a condizioni individuate dall'hardware: per esempio, una divisione per zero causa un'eccezione hardware che interrompe l'esecuzione del programma. Generalizzando, si può affermare che un'eccezione è il risultato di una qualunque causa che impedisca al processore di eseguire un'istruzione.

Le eccezioni si possono dividere nei seguenti tipi: trap: accesso non consentito in memoria, divisione per 0, disconnessione dalla rete, errore di trasferimento dati a stampante; interrupt: richiesta spesso asincrona e di provenienza esterna al microprocessore che forza il sistema operativo a interrompere il programma in esecuzione; system call: chiamate di un programma a una funzione del sistema operativo, ad esempio per eseguire un'operazione su un o su un processo.

Le eccezioni possono essere quindi inattese, previste o addirittura volute dal programmatore. Al verificarsi di un'eccezione, il processore sospende l'esecuzione del programma corrente e passa a una routine predefinita del sistema operativo. Tale routine può avere compiti speciali (ad esempio, un interrupt è spesso usato per ricevere dati dalle periferiche), o può anche terminare il programma nel caso non possa fare nulla per risolvere il problema, come nel caso classico della divisione per zero.

Eccezioni software Per quanto riguarda il software, termine eccezione è stato riutilizzato in molti linguaggi di programmazione ad alto livello, come per esempio Ada, C++, Java e Python.

In questo contesto, un'eccezione è un meccanismo per interrompere l'esecuzione di un sottoprogramma in caso di errore di run-time e propagare l'errore ad un livello più alto del programma stesso. Figurativamente, l'eccezione viene lanciata in basso, e catturata più in alto.

Ciò permette di scrivere il codice sorgente assumendo che non vi siano malfunzionamenti, demandando a routine specializzate il compito di risolvere eventuali problemi incontrati durante il percorso. In contrasto con l'approccio di linguaggi meno evoluti come il C standard, dove in pratica ogni condizione di errore deve essere controllata "sul posto", si ottiene un codice più chiaro e una gestione più logica degli errori. Nel caso di linguaggio ad oggetti, le eccezioni sono degli oggetti come tutti gli altri ed è possibile quindi usarle per memorizzare una notevole mole di informazioni riguardo all'errore occorso.

Normalmente il programmatore deve prevedere esplicitamente quali condizioni di errore possono generare un'eccezione e come risolverle. Trascurare di catturare un'eccezione fa sì che essa venga propagata al livello più alto possibile, cioè al sistema operativo, che tipicamente termina il programma.

Bibliografia

Contiene una descrizione dettagliata dei diversi tipi di eccezioni e degli usi impropri ma diffusi del termine.

Contiene una descrizione di che cos'è un'eccezione software, degli usi impropri del termine, dei modelli realizzativi e dei meccanismi di cattura e di gestione.

Voci correlate Bug Gestione delle eccezioni Sicurezza rispetto alle eccezioni

Categoria:Concetti di programmazione