Programación D - Manejo de excepciones

Una excepción es un problema que surge durante la ejecución de un programa. La excepción de AD es una respuesta a una circunstancia excepcional que surge mientras se ejecuta un programa, como un intento de dividir por cero.

Las excepciones proporcionan una forma de transferir el control de una parte de un programa a otra. El manejo de excepciones D se basa en tres palabras clavetry, catchy throw.

  • throw- Un programa lanza una excepción cuando aparece un problema. Esto se hace usando unthrow palabra clave.

  • catch- Un programa detecta una excepción con un controlador de excepciones en el lugar de un programa en el que desea manejar el problema. loscatch La palabra clave indica la captura de una excepción.

  • try - A trybloque identifica un bloque de código para el que se activan excepciones particulares. Le sigue uno o más bloques de captura.

Suponiendo que un bloque generará una excepción, un método detecta una excepción usando una combinación de try y catchpalabras clave. Se coloca un bloque try / catch alrededor del código que podría generar una excepción. El código dentro de un bloque try / catch se conoce como código protegido, y la sintaxis para usar try / catch es similar a la siguiente:

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

Puede enumerar varios catch declaraciones para detectar diferentes tipos de excepciones en caso de que su try block genera más de una excepción en diferentes situaciones.

Lanzar excepciones en D

Las excepciones se pueden lanzar en cualquier lugar dentro de un bloque de código usando throwdeclaraciones. El operando de las sentencias throw determina un tipo para la excepción y puede ser cualquier expresión y el tipo del resultado de la expresión determina el tipo de excepción lanzada.

El siguiente ejemplo arroja una excepción cuando se produce la condición de división por cero:

Ejemplo

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

Captura de excepciones en D

los catch bloque siguiendo el trybloque detecta cualquier excepción. Puede especificar qué tipo de excepción desea capturar y esto está determinado por la declaración de excepción que aparece entre paréntesis después de la palabra clave catch.

try { 
   // protected code 
} 

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

El código anterior detecta una excepción de ExceptionNametipo. Si desea especificar que un bloque catch debe manejar cualquier tipo de excepción que se lanza en un bloque try, debe poner puntos suspensivos, ..., entre los paréntesis que encierran la declaración de excepción de la siguiente manera:

try { 
   // protected code 
} 

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

El siguiente ejemplo arroja una excepción de división por cero. Está atrapado en un bloque de retención.

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

Cuando se compila y ejecuta el código anterior, lee el archivo creado en la sección anterior y produce el siguiente resultado:

Cannot divide by zero!
5