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

파이썬에서 IndentationError 예외를 잡는 방법

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)나 에디터의 자동 들여쓰기 기능을 활용해 들여쓰기를 일관되게 유지하는 것이 가장 좋은 예방책입니다.