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

贺, 贺朝

关于作者: 贺朝

为您推荐