位置:首頁 > 高級語言 > D語言教學 > D語言異常處理

D語言異常處理

異常出了問題的程序的執行期間產生了。一個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