位置:首页 > 高级语言 > D语言在线教程 > D语言异常处理

D语言异常处理

异常出了问题的程序的执行期间产生了。一个D程序异常是特殊情况一个程序运行时所产生,如试图除以零的响应。

异常提供了一种从程序的一部分控制权转移到另一个。 D程序异常处理是建立在三个关键词: try, catch, 及throw.

  • throw: 一个程序抛出异常时,问题出现了。这是通过使用一个throw关键字。

  • catch: 一种程序,在要处理该问题的计划中的地位异常处理程序捕获异常。catch关键字表示异常捕获。

  • try: try块标识代码块的哪些特定的异常将被激活。它后跟一个或多个catch块。

假设一个块将抛出一个异常,一个方法捕获使用try和catch关键字的组合异常。try/ catch块放在围绕,可能产生异常的代码。try / catch块中的代码被称为受保护的代码,以及语法使用try/ catch语句如下所示:

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

可以列出下多个catch语句来捕获不同类型的异常的情况下,try块在不同情况提出了多个异常。

引发异常:

异常可以在任何地方使用抛出在throw语句的代码块中。在throw语句的操作数确定一个类型的异常,可以是任何表达式,表达式的结果的类型决定抛出的异常的类型。

以下是零条件除法发生抛出异常的一个例子:

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

捕获异常:

try块中的catch块下面的捕获的任何异常。可以指定想要什么类型的异常捕捉,这是由以下关键字捕捉出现在括号中的异常声明确定的。

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

上面的代码将捕获一个异常的ExceptionName类型。如果您要指定一个catch块应该处理任何类型的被扔在一个try块中的异常,必须把省略号...,内附异常声明如下括号之间:

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

下面是一个例子,它抛出一个除零异常,我们捕获它在catch块。

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

当上面的代码被编译并执行,它在读取上一节中创建的文件,并产生以下结果:

Cannot divide by zero!
5