IndentationError는 파서(parser)가 소스 코드가 들여쓰기 규칙을 따르지 않는 부분을 발견할 때 발생하는 예외입니다. 이 오류는 구문 분석(컴파일) 단계에서 발생하기 때문에, 일반적인 런타임 예외처럼 아무 위치에서나 잡을 수 있는 것은 아닙니다.
IndentationError를 잡을 수 있는 경우와 없는 경우
모듈은 처음 임포트될 때 컴파일되므로, 이 시점에 발생하는 IndentationError는 try/except 블록으로 잡을 수 있습니다.
반면, try/except 블록이 포함된 같은 모듈 안에서는 잡을 수 없습니다. 들여쓰기 오류가 있으면 파이썬 인터프리터가 해당 모듈의 컴파일조차 완료하지 못한 채 실행이 중단되기 때문에, 모듈 내부의 어떤 코드도 실행될 기회가 없습니다.
예제 1: 들여쓰기 오류가 있는 모듈 만들기
먼저 들여쓰기가 잘못된 모듈 파일(bad_indent.py)을 작성합니다.
# bad_indent.py
def f():
z = ['foo', 'bar'] # 함수 본문이 들여쓰기되지 않음
for i in z:
if i == 'foo':
print(i)
예제 2: 모듈을 임포트하며 예외 처리하기
다른 스크립트에서 이 모듈을 임포트하고, 발생하는 예외를 try/except로 처리합니다.
try:
import bad_indent
except IndentationError as e:
print("들여쓰기 오류를 잡았습니다:", e)
출력 결과
들여쓰기 오류를 잡았습니다: expected an indented block
정리
- IndentationError는 코드 실행 전 컴파일(구문 분석) 단계에서 발생합니다.
- 모듈을 임포트하는 쪽에서는 try/except 블록으로 해당 예외를 잡을 수 있습니다.
- 오류가 있는 코드와 try/except가 같은 파일에 있으면 컴파일 자체가 실패하므로 예외 처리 코드가 실행되지 않습니다.
- 평소에는 flake8, pylint 같은 린터(linter)나 에디터의 자동 들여쓰기 기능을 활용해 들여쓰기를 일관되게 유지하는 것이 가장 좋은 예방책입니다.