delphi raise 語句 丟擲異常

2021-09-29 14:17:12 字數 1402 閱讀 4079

//例1:

begin

raise exception.create('丟擲異常');

end;

//例2:

begin

raise exception.createfmt('%s %d', ['錯誤**:', 999]);

end;

//例3:

varexc: exception;

begin

exc := exception.create('發現異常');

raise exc;

end;

引發和處理異常

要建立乙個異常物件,應在raise語句中呼叫異常類的構造器,如

raise ematherror.create;

一般情況下,raise具有如下形式

raise object at address

這裡的object和at address都是可選的。如果object被省略,那麼語句將再引發當前異常(見再引發異常)。當某個address被指定時,通常是乙個指向過程或函式的指標;利用該選項可以從堆疊中較早的點(與錯誤實際發生的點比較)引發異常。

異常被引發,即異常在raise語句中被引用時,異常由特殊的異常處理邏輯來管理。通常,raise語句從不返回控制。取而代之的是,它把控制傳遞到最內層的異常處理程式,該處理程式能處理給定類的異常。(最內層的處理程式就是乙個try...except塊中尚未退出的最近入口。)

例如,下面的函式把乙個串轉換為整數,如果結果在指定範圍之外則引發乙個erangeerror異常。

function strtointrange(const s: string; min, max: longint): longint;

begin

result := strtoint(s);  // strtoint函式在sysutils單元中定義

if (result < min) or (result > max) then

raise erangeerror.createfmt(

'%d is not within the valid range of %d..%d',

[result, min, max]);

end;

可以注意到,在raise語句中呼叫的是createfmt方法。exception類及其後裔類擁有特殊的構造器,為建立異常訊息和環境id提供多於一種途徑。

引發的異常在其處理後自動銷毀,決不要試圖人為銷毀乙個引發的異常。

注意:單元的初始化節中引發異常不能達到預期的結果。一般的異常支援來自sysutils單元,在異常支援可用之前該單元必需被初始化。如果乙個異常在初始化過程中發生,那麼包括sysutils單元在內所有初始化過的單元,都會被結束(finalized)並且異常被再引發。這時異常**獲和處理,通常通過中斷程式。

好的**像粥一樣,都是用時間熬出來的

python之丟擲異常(raise語句)

用 raise 能夠主動丟擲異常,使用 raise 異常名 丟擲該類異常 也可以單獨使用 raise 再次引發剛發生的異常 try 1 0except print 錯誤 同時能夠指定丟擲異常的描述資訊 raise indexerror 索引錯誤 所以這樣子就用 raise 異常名 from 異常類 ...

python 丟擲 python丟擲異常的方法

python丟擲異常的方法 閱讀 89 異常是python物件,表示乙個錯誤。當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。常見異常 attributeerror 呼叫不存在的方法引發的異常 eoferror 遇到檔案末尾引發的異常 importerror 匯入模組出錯引發的...

java throw丟擲異常

1 throws關鍵字通常被應用在宣告方法時,用來指定可能丟擲的異常。多個異常可以使用逗號隔開。當在主函式中呼叫該方法時,如果發生異常,就會將異常拋給指定異常物件。如下面例子所示 public class shoot public static void main string args catch...