什麼是異常?為什麼要用它?
所謂「異常」是指乙個異常類的物件。delphi的vcl中,所有異常類都派生於exception類。該類宣告了異常的一般行為、性質。最重要的是,它有乙個message屬性可以報告異常發生的原因。
但需要強調的是,異常用來標誌錯誤發生,卻並不因為錯誤發生而產生異常。產生異常僅僅是因為遇到了raise,在任何時候,即使沒有錯誤發生,raise都將會導致異常的發生。異常的發生,僅僅是因為raise,而非其他!採用丟擲異常以處理意外情況,則可以保證程式主流程中的所有**可用,而不必加入繁雜的判斷語句。例如,函式a丟擲異常:
function a() : integer;
vatpfile : textfile;
begin
…… // 一些**
pfile := somefunctiontoopenanfile();
if pfile = nil then
raise exception.create(′open file failed!′); // 檔案開啟失敗丟擲異常
read(pfile, ……); // 讀檔案
…… // 其他一些對檔案的操作,此時可以保證檔案指標有效
end;
函式a的**使得對檔案開啟的出錯處理非常簡單。如果開啟檔案失敗,則丟擲乙個exception類的異常物件,函式立刻返回,從而保護了以下對檔案指標的操作不被執行。丟擲的異常也需要**獲和處理。假設函式b呼叫了函式a,要捕獲這個檔案開啟失敗的異常,就需要在呼叫a之前先預設乙個陷阱,這個陷阱就是所謂的「try…except塊」。先看一下函式b的**:
procedure b();
begin
…… // 一些**
trya(); // 呼叫a
somefunctiondependona(); // 依賴於a的結果的函式
except
showmessage(′some error occured′); // 嘿嘿,掉進來了,發生異常
end;
…… // 繼續的**
end;
a丟擲的異常,會被b所設的try…except所捕獲。一旦捕獲到異常,就不再執行之後的敏感**,而是立刻跳至except塊執行錯誤處理,處理完成後再繼續執行整個try塊之後的**。程式流程的控制權被留在了函式b。
《Delphi高手突破》學習筆記(一)
delphi高手突破 據說挺不錯,他用物件導向的觀點描述了delphi中的類和vcl架構。第二章 物件導向程式設計理論基礎 設計優良的類的某些共同特徵 具有狀態資訊,介面簡單 明了,易用。在op的類中,有四種訪問級別 private protected public published。其中publ...
《Delphi高手突破》學習筆記(二)
第四章 vcl庫 tobject封裝了op類 物件的最基本行為。tpersisitent派生自tobject,它及其派生類具有自我儲存 持久存在的能力。tcomponent派生自tpersisitent,該分支下所有的類都可以被稱為 元件 元件的一般特性 1 可出現在開發環境的 元件板 上 2 能夠...
Python學習筆記之錯誤和異常及訪問錯誤訊息詳解
錯誤和異常 指定異常 可以指定要在except塊中處理哪個錯誤,如下所示 try some code except valueerror some code 現在它會捕獲 valueerror 異常,但是不會捕獲其他異常。如果我們希望該處理程式處理多種異常,我們可以在except後面新增異常元組。t...