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