
- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境配置
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件語句
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - Mixin
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變物件
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 契約式程式設計
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- 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 }
如果您的 try 塊在不同情況下引發多個異常,您可以列出多個 catch 語句來捕獲不同型別的異常。
在 D 中丟擲異常
可以使用 throw 語句在程式碼塊中的任何位置丟擲異常。throw 語句的運算元確定異常的型別,可以是任何表示式,表示式的結果型別決定丟擲的異常型別。
以下示例在出現除以零的情況時丟擲異常:
示例
double division(int a, int b) { if( b == 0 ) { throw new Exception("Division by zero condition!"); } return (a/b); }
在 D 中捕獲異常
try 塊後面的 catch 塊捕獲任何異常。您可以指定要捕獲的異常型別,這由 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
廣告