`Code.LoadError`

Code.LoadError

파일을 불러올 수 없을 때 발생하는 예외예요.

이 예외는 주로 Code 모듈의 함수들이 던집니다. 예를 들면 이렇게요:

Code.require_file("missing_file.exs")
** (Code.LoadError) could not load missing_file.exs. Reason: enoent

다음 필드는 공개 필드라서 자유롭게 접근할 수 있어요:

  • :file (t:String.t/0) — 파일 이름
  • :reason (t:term/0) — 파일을 불러오지 못한 이유

출처: Code.LoadError

본문

Elixir에서 파일을 불러온다는 것, 즉 "로드한다"는 것은 해당 파일의 코드를 읽어들여 현재 프로세스에서 실행 가능한 상태로 만드는 일을 뜻해요. Code.require_file/1, Code.compile_file/1 같은 함수가 이 작업을 담당하죠. 그런데 정작 불러오려는 파일이 없거나, 접근 권한이 없거나, 파일이지만 내용이 이상하면 이 작업은 실패합니다.

위 예시가 바로 그 대표적인 경우예요. 존재하지 않는 missing_file.exsCode.require_file/1로 불러오려다가 Code.LoadError가 발생했죠. 여기서 Reason: enoent는 운영체제가 "그런 파일이나 디렉터리는 없습니다(no such file or directory)"라고 알려주는 에러 코드입니다.

이 예외가 들고 있는 필드는 디버깅할 때 정확한 실마리를 줘요. :file은 어떤 파일을 불러오려다 실패했는지, :reason은 그 이유가 정확히 무엇인지를 알려줍니다. 특히 :reason을 보면 단순히 존재하지 않는 문제인지, 권한 문제인지, 아니면 다른 이유인지를 구분할 수 있어요.

대부분의 경우 이 예외가 나왔다면 다음을 확인해 보는 게 좋습니다. 경로에 오타가 없는지, 파일이 실제로 그 위치에 존재하는지, 그리고 파일을 읽을 수 있는 권한이 있는지. Code.LoadError는 "무언가 파일을 불러올 준비가 안 됐다"는 신호이므로, 파일 시스템을 먼저 점검하는 게 답에 가까워요.

더 알아보기

  • 파일과 코드를 불러오는 다양한 함수는 Code 모듈 문서에서 확인할 수 있어요.
  • iex나 Mix 프로젝트에서 파일 로드가 실패할 때도 같은 예외가 나타날 수 있습니다.
  • 운영체제의 에러 코드(:enoent 등)는 Erlang/OTP의 문서에서 더 자세히 다룹니다.