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

Python 예외는 항상 런타임 오류일까? 구문 오류와의 차이 이해하기

모든 Python 예외가 런타임 오류는 아닙니다

많은 초보 개발자들이 Python에서 발생하는 예외(exception)를 곧바로 런타임 오류라고 생각하지만, 사실은 그렇지 않습니다. Python의 예외 중 일부는 프로그램이 실행되기도 전에 발견되는 구문(syntax) 오류에 해당합니다.

예를 들어 다음과 같은 코드를 실행하면 어떻게 될까요?

File "C:/Users/TutorialsPoint1/~.py", line 4
else:
^
SyntaxError: invalid syntax

실행 결과를 보면 SyntaxError: invalid syntax라는 메시지가 출력됩니다. 즉, 이 오류는 런타임 오류가 아니라 구문 오류입니다. 프로그램이 실행조차 되지 않은 상태에서 파싱(parsing) 단계에서 이미 문제가 발견된 것입니다.

버그와 디버깅

프로그램에 존재하는 오류나 부정확한 동작을 흔히 버그(bug)라고 부릅니다. 그리고 이러한 오류를 찾아내고 제거하는 과정을 디버깅(debugging)이라고 합니다.

프로그래밍에서 발생하는 오류는 크게 세 가지로 분류할 수 있습니다.

  1. 구문 오류(Syntax errors)
  2. 런타임 오류(Runtime errors)
  3. 논리 오류(Logical errors)

1. 구문 오류(Syntax Errors)

구문 오류는 Python 인터프리터가 프로그램을 파싱(해석)하는 단계에서 발견됩니다. 이 오류가 존재하면 인터프리터는 코드를 한 줄도 실행하지 않은 채 오류 메시지를 출력하고 종료합니다.

쉽게 비유하자면, 영어 글쓰기에서의 오탈자나 문법 오류와 같습니다. 문장 자체가 규칙에 맞지 않아 읽을 수 없는 상태인 것이죠.

2. 런타임 오류(Runtime Errors)

반면, 프로그램에 구문 오류가 없다면 Python 인터프리터는 해당 프로그램을 정상적으로 실행합니다. 하지만 실행 도중에 런타임 오류를 만나면 프로그램이 비정상적으로 종료될 수 있습니다.

런타임 오류란 파싱 단계에서는 발견되지 않았지만, 실제로 코드가 실행되는 순간에 비로소 드러나는 문제를 의미합니다.

대표적인 Python 런타임 오류의 예

  • 0으로 나누기 (division by zero)
  • 호환되지 않는 타입 간의 연산 수행
  • 정의되지 않은 식별자(identifier) 사용
  • 존재하지 않는 리스트 요소, 딕셔너리 값 또는 객체 속성에 접근
  • 존재하지 않는 파일에 접근하려는 시도

정리

결론적으로, Python의 예외는 모두 런타임 오류인 것은 아니며 일부는 구문 오류입니다. 구문 오류는 실행 전 파싱 단계에서 잡히고, 런타임 오류는 실행 중에 발생하며, 논리 오류는 프로그램이 의도대로 동작하지 않는 결과로 나타납니다. 세 가지 오류 유형의 차이를 명확히 이해하면 디버깅 시간을 크게 줄일 수 있습니다.