본문 바로가기
08.개발&프로그래밍/1.파이썬

2. Python IndentationError(들여쓰기 문제) 완벽 가이드

by JWJ Family 2025. 7. 15.
728x90

이 글에서는 Python에서 발생하는 IndentationError—들여쓰기 문제의 정의와 주된 원인, 대표 사례, 해결 방법 등을 자세히 살펴봅니다. 다양한 예제와 함께 단계별 디버깅 팁을 제공하며, 마지막에는 다음 챕터인 NameError: 정의되지 않은 이름 사용 문제 예고를 담습니다. :contentReference[oaicite:1]{index=1}

1. IndentationError란?

IndentationError는 Python 인터프리터가 소스 코드에서 들여쓰기 규칙을 위반한 부분을 발견하면 발생하는 예외입니다. Python은 중괄호 대신 들여쓰기로 코드 블록을 구분하기 때문에, 들여쓰기 수준이 맞지 않으면 코드 해석이 불가능해집니다. 이 에러는 실행 이전 단계인 파싱(parse) 과정에서 감지되며, 에러 메시지에 줄 번호와 위치 표시가 나타납니다. 

2. 주요 발생 원인

  • 탭과 스페이스 혼용: 파일 내에서 탭(Tab)과 스페이스(Space)를 섞어 사용했을 때 발생합니다. 
  • 들여쓰기 수준 불일치: 같은 코드 블록 내에서 들여쓰기 개수를 다르게 설정하면 에러가 납니다. 
  • 블록 헤더 뒤 미작성: `if`, `for`, `while`, `def` 등 뒤에 `:`는 있지만 블록 본문에 들여쓰기를 누락한 경우입니다. 
  • 불필요한 들여쓰기: 들여쓰기 블록이 시작되지 않은 곳에서 스페이스/탭을 사용했을 때 발생합니다. 
  • 에디터 설정 오류: IDE나 편집기에서 탭 크기(Tab Size)나 자동 들여쓰기 설정이 달라서 생기는 문제입니다. 

3. 실습 예제

아래 코드는 대표적인 IndentationError를 재현한 예제입니다.

# 예제: 탭과 스페이스 혼용 및 블록 누락
def compute_sum(a, b):  # 함수 정의
␉result = a + b        # 탭(tab)으로 들여쓰기
    return result      # 스페이스(space)로 들여쓰기

for i in range(3)      # ':' 뒤에 블록 누락
print(i)

위 코드 첫 번째 블록에서는 탭과 스페이스를 혼용해 들여쓰기 수준이 일치하지 않습니다. {index=10} 두 번째 블록에서는 `for` 구문 뒤에 블록 들여쓰기가 전혀 없으므로 `expected an indented block` 에러가 발생합니다. 

4. 실행 결과 및 설명

터미널에 다음과 같은 에러 메시지가 출력됩니다:

  File "example.py", line 2
␉result = a + b
    ^
IndentationError: unindent does not match any outer indentation level

  File "example.py", line 5
for i in range(3)      # ':' 뒤 블록 누락
^
IndentationError: expected an indented block

첫 번째 에러는 탭과 스페이스 혼용으로 들여쓰기 수준이 달라졌음을, 두 번째 에러는 블록 본문이 없음을 알려줍니다. 

5. 해결 방법 & 디버깅 팁

  1. 일관된 들여쓰기 사용: 탭 대신 스페이스(권장)를 사용하거나, 설정에 맞춰 탭만 사용합니다. 
  2. 에디터 설정 확인: VS Code, PyCharm 등에서 탭 크기(Tab Size)를 통일하세요. 
  3. 자동 포맷터 사용: `black`이나 `autopep8` 같은 도구로 코드를 일괄 정리합니다.
  4. 작은 단위로 테스트: 큰 파일 대신 함수 단위로 실행해 보며 블록별 오류를 줄입니다.
  5. 에러 메시지 활용: 메시지의 화살표(^)와 줄 번호를 보고 정확한 위치를 파악합니다. 

6. 추가 실습 및 심화 팁

1) 코드 에디터에서 View → Toggle Render Whitespace 기능을 사용해 보이지 않는 문자를 확인해 보세요.

2) 팀 프로젝트 시에는 `.editorconfig` 파일로 팀원 간 설정을 공유하여 통일성을 유지하세요.

3) `TabError`는 `IndentationError`의 하위 예외로, 탭·스페이스 혼용이 심각할 때 발생합니다.

4) Python 공식 문서를 참고해 예외 계층 구조를 이해하면 디버깅에 도움이 됩니다.

7. 정리 및 다음 단계

이번 챕터에서는 IndentationError의 정의, 주요 원인, 대표 사례, 해결 방법까지 단계별로 다뤘습니다. 다음 챕터에서는 NameError: 정의되지 않은 이름 사용 문제의 원인과 해결책을 살펴볼 예정이니 많은 관심 부탁드립니다.

반응형