首页 > 其他分享 >无涯教程-D语言 - 异常处理

无涯教程-D语言 - 异常处理

时间:2023-11-18 16:31:50浏览次数:106  
标签:代码 教程 语言 捕获 无涯 try catch 异常 throw

Exception异常是在程序执行期间出现的问题,异常提供了一种将控制权从程序的一部分转移到另一部分的方法。 D异常处理基于三个关键字 try , catch 和 throw 。

  • throw     -  出现问题时,程序将引发异常。这是通过 throw 关键字完成的。

  • catch      -   catch 关键字用于捕获异常。

  • try           -  try 块标识了为其激活了特定异常的代码块。

假设一个块会引发异常,则方法使用 try 和 catch 关键字的组合来捕获异常,在可能产生异常的代码周围放置了一个try/catch块。使用try/catch的语法如下

try { 
   //受保护的代码
} 
catch( ExceptionName e1 ) { 
   //捕获块
} 
catch( ExceptionName e2 ) { 
   //捕获块
} 
catch( ExceptionName eN ) { 
   //捕获块
} 

您可以列出多个 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 { 
   //受保护的代码
} 

catch( ExceptionName e ) { 
   //处理ExceptionName异常的代码
}

上面的代码捕获了 ExceptionName 类型的异常,如果要指定catch块应处理在try块中引发的任何类型的异常,则必须在括起异常声明的括号之间放置省略号...,如下所示-

try { 
   //受保护的代码
} 

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

参考链接

https://www.learnfk.com/d-programming/d-programming-exception-handling.html

标签:代码,教程,语言,捕获,无涯,try,catch,异常,throw
From: https://blog.51cto.com/u_14033984/8463749

相关文章

  • 自然语言处理预训练——子词嵌入
    在英语中,“helps”“helped”和“helping”等单词都是同一个词“help”的变形形式。“dog”和“dogs”之间的关系与“cat”和“cats”之间的关系相同,“boy”和“boyfriend”之间的关系与“girl”和“girlfriend”之间的关系相同。在法语和西班牙语等其他语言中,许多动词有40多种变......
  • go语言window|mac|linux下交叉编译其他平台的软件包
    go语言window|mac|linux下交叉编译其他平台的软件包注意:go1.17发现直接使用set是不起作用的,必须要使用goenv-w来设置一、设置编译环境,需要发布哪个平台Window下1、设置Linux编译环境SETCGO_ENABLED=0setGOARCH=amd64setGOOS=linux2、设置Mac编译环境goenv......
  • 无涯教程-D语言 - 并发
    并发使程序在多个线程上运行,一个示例是Web服务器同时响应多个客户端,并发通过消息传递很容易,但是它们基于数据共享则很难编写。启动线程函数spawn()将指针作为参数,并从该函数启动新线程,该函数执行的任何操作,包括它可能调用的其他函数,都将在新线程上执行。importstd.stdio;im......
  • 磁力搜索引擎大全教程,如何使用磁力链接。
      磁力链接是一种特殊的下载链接,磁力链接可以理解为一个文件识别码,而并非具体的资源地址,下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点),如果找到则可以进行传输下载。一般年代越久远的磁力链接下载成功的几率越小,因为持有该资源的节点越少。一......
  • 无涯教程-D语言 - 文件I/O
    文件File由std.stdio模块的File结构表示,文件表示字节序列,无论是文本文件还是二进制文件都没有关系,D编程语言提供对高级函数的访问/处理存储设备上文件。打开文件首先通过指定文件名和所需的访问权限来打开文件。Filefile=File(filepath,"mode");在这里,filename是字符串......
  • c5w2_自然语言处理与词嵌入
    自然语言处理与词嵌入词嵌入one-hot向量表示了每个词在词汇表中的位置,但是每个one-hot向量的内积为0,不能表示出每个词之间的相互关系。Iwantaglassoforangejuice.Iwantaglassofapple__.例如,对于上述的这样一句话,通过学习算法可能知道在orange后面填入juice是一......
  • 无涯教程-D语言 - 不可变(Immutables)
    我们经常使用可变的变量,但是在很多情况下不需要可变性。D的不变性概念由const和immutable关键字表示,尽管这两个词本身的含义很接近,但它们在程序中的职责有所不同,有时是不兼容的。枚举常量枚举常量使将常量值与有意义的名称相关联成为可能,一个简单的如下所示。importstd.stdi......
  • C语言小案例
    在一个整型数组中插入任意一个数字,进行重新排序,用多种方法如何实现?方法1:直接插入排序法#include<stdio.h>voidinsert(intarr[],intn,intx){inti,j;for(i=0;i<n;i++){if(arr[i]>x){for(j=n-1;j>=i;j--){......
  • Windos操作系统下的Zookeeper安装图文教程
    凯哥已经准备好最新版本3.9.1且已经配置好了。既获取到配置好的。获取到凯哥准备的安装后,只需要修改一下配置。将解压包解压后,找到conf文件,里面有个zoo.cfg配置文件。如下图:下载后conf文件夹内容打开zoo.cfg配置文件后,找到13、14这两行。将dataDir和dataLogDir的路径修改成自......
  • Windos操作系统下的Zookeeper安装图文教程
    凯哥已经准备好最新版本3.9.1且已经配置好了。既获取到配置好的。获取到凯哥准备的安装后,只需要修改一下配置。将解压包解压后,找到conf文件,里面有个zoo.cfg配置文件。如下图:下载后conf文件夹内容打开zoo.cfg配置文件后,找到13、14这两行。将dataDir和dataLogDir的路径修改成自己的就......