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