Enum.EmptyError 예외
Enum.EmptyError 예외
Enum.Min([])처럼 비어 있지 않은 열거형을 기대하는 함수에 빈 열거형이 들어왔을 때 발생하는 예외예요. 요컨대 "비어 있으면 안 되는데 비어 있네"라고 Elixir가 알려주는 신호죠.
예를 들어 빈 리스트에서 최솟값을 구하려고 하면 다음과 같은 에러가 떠요.
iex> Enum.min([])
** (Enum.EmptyError) empty error
본문
Enum.min/1처럼 항상 최소 하나의 원소가 있어야 결과를 만들 수 있는 함수는, 빈 열거형을 받으면 결과를 만들어 낼 방법이 없어요. 그래서 Elixir는 값을 만들어내는 대신 Enum.EmptyError를 던져 "여기서는 빈 컬렉션을 처리할 수 없다"는 사실을 분명히 알려줘요.
이런 상황은 실제 코드에서 의외로 흔히 만나게 돼요. 예를 들어 사용자 목록, 주문 내역 같은 데이터가 외부에서 들어왔는데 그게 비어 있는 경우가 있죠. 그럴 때 단순히 Enum.min(enumerable)을 호출하면 이 예외가 터지고 프로그램이 멈춰요.
그래서 빈 리스트가 올 수 있는 상황이라면 두 가지 중 하나를 선택하는 게 좋아요.
- 빈 값에 대한 기본값을 제공하는 함수를 쓴다.
Enum.min/2처럼 두 번째 인자로 기본값(예:0)을 받는 형태를 사용하면 빈 리스트도 안전하게 처리해요. - 아니면 미리 비어 있는지 확인해서 분기한다.
enum == []같은 패턴 매칭으로 빈 경우를 먼저 걸러내는 거예요.
이 예외를 그대로 받아서 처리할 수도 있어요. Enum.min([], fn -> 0 end)처럼 명시적으로 기본값을 주거나, 호출하는 쪽에서 case나 try/rescue로 감싸서 처리하면 돼요. 다만 Elixir의 문화에서는 예외를 잡아서 흐름을 제어하기보다, 값의 흐름으로 안전하게 처리하는 걸 더 선호해요.
더 알아보기
Enum모듈의min/1,max/1처럼 빈 컬렉션에서 오류가 나는 다른 함수들도 함께 살펴보면 도움이 돼요.- 빈 리스트를 안전하게 다루려면
Enum모듈의 기본값을 받는 함수(min/2,max/2등)를 확인해 보세요. - 예외의 구조와 처리 방식이 궁금하다면
Exception모듈 문서를 함께 보면 좋아요.