Logo
Section 1 / 8

异常

本课程简要介绍了异常。

导入

异常

本课程简要介绍了异常。

异常

程序中难免会遇到意外情况:用户操作错误、编程错误、程序运行环境变化等。程序必须以适当的方式编写,以便在面对异常情况时不会产生错误结果。

某些异常情况可能严重到需要终止程序的执行。例如,关键信息缺失或无效,或某个设备无法正常工作。D 语言的异常处理机制可以帮助我们在必要时停止程序执行,并在可能的情况下从意外状况中恢复。

举个严重情况的例子:向一个仅认识四种算术运算符的函数传入一个未知的运算符。

1import std.stdio; 2import std.format; 3 4void main() { 5 int first = 16; 6 int second = 8; 7 8 string operator = "^"; 9 switch (operator) { 10 case "+": 11 writeln(first + second); 12 break; 13 case "-": 14 writeln(first - second); 15 break; 16 case "x": 17 writeln(first * second); 18 break; 19 case "/": 20 writeln(first / second); 21 break; 22 default: 23 throw new Exception(format("无效的运算符: %s", operator)); 24 } 25}

上述 switch 语句无法处理未在 case 中列出的运算符,因此它会“抛出”一个“异常”。

Phobos 库中有许多抛出异常的例子。例如,to!int 可用于将整数的字符串表示转换为 int 值,当该字符串表示无效时,它就会抛出异常:

1import std.conv; 2 3void main() { 4 const int value = to!int("hello"); 5}

程序因 to!int 抛出的异常而终止。消息开头的 std.conv.ConvException 表示被抛出的异常对象类型。从名称可以判断,这是一个定义在 std.conv 模块中的 ConvException 类型。


在下一课中,我们将探讨 throw 语句。

程序环境

throw 语句