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