TryClauseError 예외

TryClauseError 예외

tryelse 절을 쓰다 보면 어떤 값도 절에 매칭되지 않아 "아무 절에도 걸리지 않았다"는 오류를 만날 수 있어요. 이 예외는 바로 그 상황, 즉 try/1else 절 중 어느 것도 매칭되지 않을 때 발생해요.

출처: TryClauseError exception (Elixir v1.20.4)

본문

TryClauseErrortry/1else 절 중 어느 것도 매칭되지 않을 때 발생하는 예외예요.

예를 들어 아래 코드처럼 with 대신 tryelse를 쓰는 상황을 생각해 볼게요. try do 블록이 :ok을 반환하는데, else 절에는 :not_ok만 정의되어 있고 :ok -> :ok 절이 빠져 있어요. 그러면 어느 절에도 매칭되지 않으므로 예외가 발생해요.

iex> try do
...>   :ok
...> rescue
...>   e -> e
...> else
...>   # :ok -> :ok is missing
...>   :not_ok -> :not_ok
...> end
** (TryClauseError) no try clause matching:
...

이 예외는 다음과 같은 공개 필드를 가지며, 자유롭게 접근할 수 있어요.

  • :term (term/0) - 어떤 절에도 매칭되지 않은 값이에요.

tryelse 절은 withelse와 마찬가지로, 블록의 결과를 다시 한번 매칭하는 역할을 해요. 이때 매칭되는 절이 하나도 없다면 TryClauseError가 던져져요. 그래서 else를 쓸 때는 블록이 반환할 수 있는 모든 값에 대한 절을 빠짐없이 정의해야 해요. 실수로 하나라도 빠뜨리면 이 예외를 만나게 되죠.

특히 else 안에서 함수 호출이나 조건 분기를 하는 경우, 그 결과값까지 고려해 절을 작성해야 해요. else 절은 함수처럼 동작하므로, 불완전한 매칭은 곧 예외로 이어집니다.

더 알아보기