D編程 異常處理

2021-09-01 11:01 更新

Exception異常是在程序執(zhí)行期間出現(xiàn)的問題,異常提供了一種將控制權(quán)從程序的一部分轉(zhuǎn)移到另一部分的方法。 D異常處理基于三個關(guān)鍵字 try , catch 和 throw 。

  • throw     -  出現(xiàn)問題時,程序?qū)⒁l(fā)異常。這是通過 throw 關(guān)鍵字完成的。
  • catch      -   catch 關(guān)鍵字用于捕獲異常。
  • try           -  try 塊標(biāo)識了為其激活了特定異常的代碼塊。

假設(shè)一個塊會引發(fā)異常,則方法使用 try 和 catch 關(guān)鍵字的組合來捕獲異常,在可能產(chǎn)生異常的代碼周圍放置了一個try/catch塊。使用try/catch的語法如下

try { 
   //protected code 
} 
catch( ExceptionName e1 ) { 
   //catch block 
} 
catch( ExceptionName e2 ) { 
   //catch block 
} 
catch( ExceptionName eN ) { 
   //catch block 
} 

您可以列出多個 catch 語句以捕獲不同類型的異常,以防您的 try 塊在不同情況下引發(fā)多個異常。

拋出異常

可以使用 throw 語句在代碼塊內(nèi)的任何位置拋出異常, throw語句的操作數(shù)確定異常的類型,可以是任何表達(dá)式,表達(dá)式輸出的類型確定拋出的異常的類型。

以下示例在被零除條件發(fā)生時引發(fā)異常-

double division(int a, int b) { 
   if( b == 0 ) { 
      throw new Exception("Division by zero condition!"); 
   }
   
   return (a/b); 
}

捕獲異常

try 塊之后的 catch 塊捕獲任何異常,您可以指定要捕獲的異常類型,這取決于關(guān)鍵字catch后面括號中的異常聲明。

try { 
   //protected code 
} 

catch( ExceptionName e ) { 
   //code to handle ExceptionName exception 
}

上面的代碼捕獲了 ExceptionName 類型的異常,如果要指定catch塊應(yīng)處理在try塊中引發(fā)的任何類型的異常,則必須在括起異常聲明的括號之間放置省略號...,如下所示-

try { 
   //protected code 
} 

catch(...) { 
   //code to handle any exception 
}

下面的示例引發(fā)除以零的異常。它被捕獲在捕獲塊中。

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)); 
}

編譯并執(zhí)行上述代碼后,它將讀取上一部分中創(chuàng)建的文件,并產(chǎn)生以下輸出-

Cannot divide by zero!
5


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號