异常

异常 属于 Elixir

8 个练习

关于 异常

异常行为定义了errors如何被抛出和显示。

它包含 2 个可选的回调:

  • message/1把错误结构体转换成可读的消息。
  • exception/1根据raise/2的第 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 个练习即可练习 异常