SyntaxError — 코드 파싱 중 문법 오류 예외

SyntaxError — 코드 파싱 중 문법 오류 예외

코드를 파싱하다가 문법 오류(syntax error) 가 발생했을 때 Elixir가 던지는 예외가 SyntaxError예요. 괄호를 닫지 않았거나, 잘못된 토큰을 만나면 이 예외를 마주치게 돼요.

출처: SyntaxError — An exception raised when there's a syntax error when parsing code

본문

예를 들어 Code.eval_string/1로 문자열을 코드로 평가할 때 문법이 틀리면 다음과 같은 오류가 나와요.

iex> Code.eval_string("5 + 5h")
** (SyntaxError) invalid syntax found on nofile:1:5:
...

5 + 5h에서 5h는 유효한 숫자 리터럴이 아니기 때문에 문법 오류로 처리된 거예요. 오류 메시지의 nofile:1:5는 파일이 없는 코드(nofile)에서 1번째 줄, 5번째 컬럼에 문제가 있다는 뜻이에요.

이 예외는 주로 Code.eval_string/1이나 Code.compile_string/1처럼 문자열을 코드로 변환하는 함수를 쓸 때 만나게 돼요. 파일을 컴파일할 때는 CompileError 계열이 나오는 경우가 많고, 코드 토큰이 중간에 끊겼다면 TokenMissingError가 나오기도 해요. 문법 오류 자체가 아니라 "토큰이 끝나버렸다"는 의미라면 TokenMissingError를 별도로 확인해 보는 게 좋아요. 이 예외 데이타를 받으면 보통 Exception.message/1로 사람이 읽을 수 있는 메시지를 만들 수 있고, 필요한 경우 필드 정보로 오류 위치를 직접 출력할 수도 있어요.

공개 필드

이 예외의 다음 필드들은 공개(public) 라서 자유롭게 접근할 수 있어요.

  • :file (Path.t/0 또는 nil) — 오류가 발생한 파일 경로. 파일에서 온 코드가 아니면 nil
  • :line — 오류가 발생한 줄 번호
  • :column — 오류가 발생한 컬럼 번호
  • :description — 문법 오류에 대한 설명

이 필드들을 활용하면 예외를 받았을 때 정확한 위치 정보를 바탕으로 사용자에게 친절한 오류 메시지를 만들어 줄 수 있어요.

더 알아보기

  • 관련 함수: Code.eval_string/1, Code.compile_string/1
  • 관련 예외: TokenMissingError, CompileError
  • 문법 참고: syntax-reference 가이드 (Elixir 문법 전반)