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 문법 전반)