MismatchedDelimiterError — 구분자가 어긋날 때
MismatchedDelimiterError — 구분자가 어긋날 때
괄호를 열었는데 닫는 괄호가 다른 종류라면 코드를 파싱할 때 문제가 생겨요. 그런 구분자(delimiter) 불일치가 발견되면 던져지는 예외가 바로 MismatchedDelimiterError예요.
본문
MismatchedDelimiterError는 코드를 파싱하다가 짝이 맞지 않는 구분자를 발견했을 때 발생하는 예외예요. 예를 들어볼게요:
iex> Code.eval_string("[1, 2, 3}")
** (MismatchedDelimiterError) mismatched delimiter found on nofile:1:9:
...
[1, 2, 3}은 [로 시작해서 }로 끝나요. 열린 괄호와 닫힌 괄호의 종류가 서로 달라서, 파서가 "이건 짝이 안 맞는다"고 예외를 던지는 거예요.
이 예외의 다음 필드들은 public이라서 자유롭게 접근할 수 있어요:
:file(Path.t/0또는nil) — 오류가 발생한 파일. 파일에서 온 코드가 아니라면nil:line— 여는 구분자의 줄:column— 여는 구분자의 열:end_line— 짝이 안 맞는 닫는 구분자의 줄:end_column— 짝이 안 맞는 닫는 구분자의 열:opening_delimiter— 여는 구분자를 나타내는 atom:closing_delimiter— 짝이 안 맞는 닫는 구분자를 나타내는 atom:expected_delimiter— 있어야 했을 닫는 구분자를 나타내는 atom:description— 이 구분자 불일치 오류에 대한 설명
즉, "어디서(파일·줄·열) 어떤 구분자를 열었는데, 어떤 구분자로 닫혔고, 실제로는 어떤 닫는 구분자가 기대됐는지"를 한 번에 알 수 있어요. 코드를 분석하는 도구(IDE, 린터, 포매터)를 만들 때 유용하게 쓰는 정보예요.
더 알아보기
- Code.eval_string/1 — 문자열 코드를 파싱·평가
- Code.string_to_quoted/1 — 문자열을 인용 표현(quoted)으로 파싱할 때 발생하는 오류
- SyntaxError — 문법 오류 예외