Programmazione D - Gestione delle eccezioni
Un'eccezione è un problema che sorge durante l'esecuzione di un programma. L'eccezione AD è una risposta a una circostanza eccezionale che si verifica mentre un programma è in esecuzione, come un tentativo di divisione per zero.
Le eccezioni forniscono un modo per trasferire il controllo da una parte all'altra di un programma. La gestione delle eccezioni D si basa su tre parole chiavetry, catch, e throw.
throw- Un programma genera un'eccezione quando si presenta un problema. Questo viene fatto utilizzando un filethrow parola chiave.
catch- Un programma rileva un'eccezione con un gestore di eccezioni nel punto in cui si desidera gestire il problema. Ilcatch la parola chiave indica la cattura di un'eccezione.
try - A tryblocco identifica un blocco di codice per il quale sono attivate particolari eccezioni. È seguito da uno o più blocchi di cattura.
Supponendo che un blocco solleverà un'eccezione, un metodo cattura un'eccezione utilizzando una combinazione di try e catchparole chiave. Un blocco try / catch viene posizionato attorno al codice che potrebbe generare un'eccezione. Il codice all'interno di un blocco try / catch viene definito codice protetto e la sintassi per l'utilizzo di try / catch è simile alla seguente:
try {
// protected code
}
catch( ExceptionName e1 ) {
// catch block
}
catch( ExceptionName e2 ) {
// catch block
}
catch( ExceptionName eN ) {
// catch block
}
Puoi elencare più file catch istruzioni per catturare diversi tipi di eccezioni nel caso in cui il tuo try block solleva più di un'eccezione in diverse situazioni.
Lanciare eccezioni in D
Le eccezioni possono essere generate ovunque all'interno di un blocco di codice utilizzando throwdichiarazioni. L'operando delle istruzioni throw determina un tipo per l'eccezione e può essere qualsiasi espressione e il tipo del risultato dell'espressione determina il tipo di eccezione generata.
L'esempio seguente genera un'eccezione quando si verifica la divisione per zero:
Esempio
double division(int a, int b) {
if( b == 0 ) {
throw new Exception("Division by zero condition!");
}
return (a/b);
}
Catturare le eccezioni in D
Il catch blocco seguendo il tryblock cattura qualsiasi eccezione. È possibile specificare il tipo di eccezione che si desidera catturare e questo è determinato dalla dichiarazione di eccezione che appare tra parentesi dopo la parola chiave catch.
try {
// protected code
}
catch( ExceptionName e ) {
// code to handle ExceptionName exception
}
Il codice precedente cattura un'eccezione di ExceptionNamegenere. Se si desidera specificare che un blocco catch deve gestire qualsiasi tipo di eccezione generata in un blocco try, è necessario inserire un'ellissi, ..., tra le parentesi che racchiudono la dichiarazione di eccezione come segue:
try {
// protected code
}
catch(...) {
// code to handle any exception
}
L'esempio seguente genera una divisione per zero eccezione. È catturato nel blocco di cattura.
import std.stdio;
import std.string;
string division(int a, int b) {
string result = "";
try {
if( b == 0 ) {
throw new Exception("Cannot divide by zero!");
} else {
result = format("%s",a/b);
}
} catch (Exception e) {
result = e.msg;
}
return result;
}
void main () {
int x = 50;
int y = 0;
writeln(division(x, y));
y = 10;
writeln(division(x, y));
}
Quando il codice sopra viene compilato ed eseguito, legge il file creato nella sezione precedente e produce il seguente risultato:
Cannot divide by zero!
5