它包含 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