TryClauseError 예외
TryClauseError 예외
try의 else 절을 쓰다 보면 어떤 값도 절에 매칭되지 않아 "아무 절에도 걸리지 않았다"는 오류를 만날 수 있어요. 이 예외는 바로 그 상황, 즉 try/1의 else 절 중 어느 것도 매칭되지 않을 때 발생해요.
본문
TryClauseError는 try/1의 else 절 중 어느 것도 매칭되지 않을 때 발생하는 예외예요.
예를 들어 아래 코드처럼 with 대신 try의 else를 쓰는 상황을 생각해 볼게요. 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) - 어떤 절에도 매칭되지 않은 값이에요.
try의 else 절은 with의 else와 마찬가지로, 블록의 결과를 다시 한번 매칭하는 역할을 해요. 이때 매칭되는 절이 하나도 없다면 TryClauseError가 던져져요. 그래서 else를 쓸 때는 블록이 반환할 수 있는 모든 값에 대한 절을 빠짐없이 정의해야 해요. 실수로 하나라도 빠뜨리면 이 예외를 만나게 되죠.
특히 else 안에서 함수 호출이나 조건 분기를 하는 경우, 그 결과값까지 고려해 절을 작성해야 해요. else 절은 함수처럼 동작하므로, 불완전한 매칭은 곧 예외로 이어집니다.