Erlang 錯誤處理

2021-08-09 20:25:27 字數 1522 閱讀 9721

任何程式語言中都會有相關的錯誤處理語法,erlang 語言也不例外。

一、erlang 語言常見錯誤型別

在erlang 語言中,常見錯誤型別有三種,即throw、exit和erlang:error。throw用於丟擲呼叫者可能會捕獲的錯誤;exit錯誤是終止程序錯誤;error則是崩潰錯誤。

在erlang程式中,通過throw(why)、exit(why)和erlang:error(why)這三個函式來丟擲三種型別錯誤,同時給出原因,並讓使用者處理或退出程式等。

二、錯誤處理語法

erlang 語言中錯誤處理的語句完整格式如下:

try function_called_exp of

pattern1 [guard1]-> exp1;

pattern2 [guard2]-> exp2

...catch

excep_type:excep_pattern1 [guarda] -> expa;

excep_type:excep_pattern2 [guardb] -> expb;

....

after

after_exp

end.

該語句的執行流程為:首先執行function_called_exp,它可以是簡單的函式呼叫,也可以是帶函式呼叫的表示式。當表示式計算過程中沒有丟擲錯誤並成功執行後,會對of和catch之間的pattern1、pattern2等進行依次模式匹配,成功則執行其後的表示式。當表示式計算過程中有丟擲錯誤時,則對catch後的錯誤型別進行依次匹配,並執行匹配成功型別後的表示式進行求值。after後的語句功能是清除該語句執行中所占用的資源,如果沒有占用的資源,也可以不帶after語句。

簡單一點說的話:of後子句是對無錯誤時的結果處理;catch是匹配錯誤型別作出相應的處理;after是清理占用資源。

以下為一簡單的錯誤處理程式例項:

%filename exptest.erl

-module(exptest).

-compile(export_all).

triger_err(err) -> throw(throwerror);

triger_err(x) when is_integer(x) -> x.

call_trgr(x) ->

try triger_err(x) + 3 of

y -> y

catch

throw:info -> info

end.

編譯執行結果如下圖所示:

第一次呼叫時,傳入引數為3,不會引發錯誤,所以由of後的語句處理,並直接返回表示式的值6;第二次呼叫時傳入引數為err,會引發錯誤,所以返回結果為丟擲錯誤後匹配子句後的表示式。

Erlang(7) 順序程式的錯誤處理

顯式生成錯誤的方法 exit why 廣播乙個訊號給當前程序鏈結的所有程序。throw why 丟擲乙個呼叫者可能想要捕捉的異常錯誤。error why 指示奔潰性錯誤,非常嚴重的錯誤。捕捉錯誤,try.catch try funcorexpressionseq of pattern1 when g...

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

MySql錯誤處理(三) 錯誤處理的例子

mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...