Eccezione (informatica)
# Eccezione (informatica)

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 file 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.

