Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 SyntaxError 예외를 잡고 처리하는 방법

SyntaxError는 파서(parser)가 이해할 수 없는 소스 코드를 만났을 때 발생하는 예외입니다. 이 오류는 모듈을 가져올 때(import), exec()를 호출할 때, 또는 eval() 함수를 실행할 때 나타날 수 있습니다.

SyntaxError 예외가 가지고 있는 속성들을 활용하면, 입력된 코드 중 정확히 어느 부분이 문제를 일으켰는지 파악할 수 있습니다. 주요 속성은 다음과 같습니다.

  • filename: 오류가 발생한 파일의 이름
  • lineno: 오류가 발생한 줄 번호
  • offset: 해당 줄에서 오류가 시작되는 문자 위치
  • text: 오류를 유발한 실제 코드 문자열

예제 코드

아래 코드는 try-except 구문으로 SyntaxError를 잡아내고, 예외 객체의 속성을 사용해 오류 정보를 출력합니다.

try:
    print(eval('six times seven'))
except SyntaxError as err:
    print('Syntax error %s (%s-%s): %s' % \
          (err.filename, err.lineno, err.offset, err.text))
    print(err)

실행 결과

Syntax error <string> (1-9): six times seven
invalid syntax (<string>, line 1)

코드 설명

eval('six times seven')은 유효한 Python 표현식이 아니기 때문에 파서가 이를 해석하지 못하고 SyntaxError를 발생시킵니다. except 블록에서는 예외 객체 err의 각 속성을 읽어 다음과 같은 정보를 확인할 수 있습니다.

  • 오류가 발생한 위치: <string> (문자열로 전달된 코드이므로 파일명 대신 <string>이 표시됨)
  • 줄 번호와 오프셋: 1번째 줄의 9번째 문자부터 문제가 시작됨
  • 문제가 된 코드: six times seven

이처럼 SyntaxError를 명시적으로 잡아 처리하면, 단순히 프로그램이 중단되는 것 대신 사용자에게 친절한 오류 메시지를 제공하거나 로그를 남기는 등의 후속 조치를 취할 수 있습니다.