D Programmierung - Ausnahmebehandlung

Eine Ausnahme ist ein Problem, das während der Ausführung eines Programms auftritt. Eine AD-Ausnahme ist eine Reaktion auf einen außergewöhnlichen Umstand, der während der Ausführung eines Programms auftritt, z. B. den Versuch, durch Null zu teilen.

Ausnahmen bieten eine Möglichkeit, die Kontrolle von einem Teil eines Programms auf einen anderen zu übertragen. D Die Ausnahmebehandlung basiert auf drei Schlüsselwörterntry, catch, und throw.

  • throw- Ein Programm löst eine Ausnahme aus, wenn ein Problem auftritt. Dies geschieht mit athrow Stichwort.

  • catch- Ein Programm fängt eine Ausnahme mit einem Ausnahmebehandler an der Stelle in einem Programm ab, an der Sie das Problem behandeln möchten. Dascatch Schlüsselwort gibt das Abfangen einer Ausnahme an.

  • try - A. tryBlock identifiziert einen Codeblock, für den bestimmte Ausnahmen aktiviert sind. Es folgen ein oder mehrere Fangblöcke.

Angenommen, ein Block löst eine Ausnahme aus, fängt eine Methode eine Ausnahme mit einer Kombination aus try und catchSchlüsselwörter. Um den Code wird ein Try / Catch-Block platziert, der möglicherweise eine Ausnahme generiert. Code in einem try / catch-Block wird als geschützter Code bezeichnet, und die Syntax für die Verwendung von try / catch sieht wie folgt aus:

try { 
   // protected code 
} 
catch( ExceptionName e1 ) { 
   // catch block 
} 
catch( ExceptionName e2 ) { 
   // catch block 
} 
catch( ExceptionName eN ) { 
   // catch block 
}

Sie können mehrere auflisten catch Anweisungen, um verschiedene Arten von Ausnahmen zu erfassen, falls Ihre try Block löst in verschiedenen Situationen mehr als eine Ausnahme aus.

Ausnahmen in D werfen

Ausnahmen können mit überall innerhalb eines Codeblocks ausgelöst werden throwAussagen. Der Operand der throw-Anweisungen bestimmt einen Typ für die Ausnahme und kann ein beliebiger Ausdruck sein, und der Typ des Ergebnisses des Ausdrucks bestimmt den Typ der ausgelösten Ausnahme.

Das folgende Beispiel löst eine Ausnahme aus, wenn eine Bedingung zum Teilen durch Null auftritt.

Beispiel

double division(int a, int b) { 
   if( b == 0 ) { 
      throw new Exception("Division by zero condition!"); 
   }
   
   return (a/b); 
}

Ausnahmen in D abfangen

Das catch Block nach dem tryBlock fängt jede Ausnahme ab. Sie können angeben, welche Art von Ausnahme Sie abfangen möchten. Dies wird durch die Ausnahmedeklaration bestimmt, die in Klammern nach dem Schlüsselwort catch angezeigt wird.

try { 
   // protected code 
} 

catch( ExceptionName e ) { 
   // code to handle ExceptionName exception 
}

Der obige Code fängt eine Ausnahme von ExceptionNameArt. Wenn Sie angeben möchten, dass ein catch-Block jede Art von Ausnahme behandeln soll, die in einem try-Block ausgelöst wird, müssen Sie wie folgt ein Auslassungszeichen zwischen die Klammern setzen, die die Ausnahmedeklaration einschließen:

try { 
   // protected code 
} 

catch(...) { 
   // code to handle any exception 
}

Das folgende Beispiel löst eine Ausnahme durch Division durch Null aus. Es ist im Fangblock gefangen.

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)); 
}

Wenn der obige Code kompiliert und ausgeführt wird, liest er die im vorherigen Abschnitt erstellte Datei und erzeugt das folgende Ergebnis:

Cannot divide by zero!
5