예외

예외 에서 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개를 더 잠금 해제해요