发布于 2015-08-16 14:54:55 | 205 次阅读 | 评论: 0 | 来源: 网络整理
异常出了问题的程序的执行期间产生了。一个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