📅  最后修改于: 2020-11-04 05:18:13             🧑  作者: Mango
例外是在程序执行期间出现的问题。 AD异常是对程序运行时出现的异常情况的一种响应,例如试图除以零。
异常提供了一种将控制权从程序的一部分转移到另一部分的方法。 D异常处理基于try , catch和throw这三个关键字建立。
throw-问题出现时,程序将引发异常。这是使用throw关键字完成的。
catch-程序在要处理问题的程序中的位置捕获带有异常处理程序的异常。 catch关键字指示捕获异常。
try – try块标识为其激活了特定异常的代码块。随后是一个或多个捕获块。
假设一个块将引发异常,则一种方法使用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块捕获任何异常。您可以指定要捕获的异常类型,这取决于关键字catch后面括号中的异常声明。
try {
// protected code
}
catch( ExceptionName e ) {
// code to handle ExceptionName exception
}
上面的代码捕获了ExceptionName类型的异常。如果要指定catch块应处理在try块中引发的任何类型的异常,则必须在括起异常声明的括号之间放置省略号…,如下所示-
try {
// protected code
}
catch(...) {
// code to handle any exception
}
以下示例引发除以零的异常。它被捕获在捕获块中。
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