軌道
/
Elixir
Elixir
/
課程大綱
/
例外狀況
例外

例外狀況 在 Elixir

8 個練習

關於 例外狀況

Exception Behaviour 定義了errors如何被引發與顯示。

它包含兩個選用的回呼:

  • message/1 會將錯誤結構轉換成可讀的訊息。
  • exception/1 會從 raise/2 的第二個引數建立訊息,讓訊息可以被修改。

已定義的錯誤:

  • 與實作它們的模組同名。
  • 是結構型態的擴充。
  • 具有 :message 欄位。
  • 可搭配 raise/1 和 raise/2 使用,以引發預期的錯誤

定義例外

若要從錯誤模組定義例外,請使用 defexception 巨集:

# Defines a minimal error, with the name `MyError`
defmodule MyError do
  defexception message: "error"
end

# Defines an error with a customized exception/1 function
defmodule MyCustomizedError do
  defexception message: "custom error"

  @impl true
  def exception(value) do
    case value do
      [] ->
        %MyCustomizedError{}

      _ ->
        %MyCustomizedError{message: "Alert: " <> value}
    end
  end
end

使用例外

已定義的錯誤可以像內建錯誤一樣,使用 raise/1 或 raise/2 來引發:

raise MyError
# => ** (MyError) error

raise MyError, "an error occurred"
# => ** (MyError) an error occurred

raise MyCustomizedError
# => ** (MyCustomizedError) "custom error"

raise MyCustomizedError, "a very bad error occurred"
# => ** (MyCustomizedError) Alert: a very bad error occurred
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 例外狀況

練習已鎖定

再解鎖 2 個練習,就能練習 例外狀況