이 글에서는 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. 해결 방법 & 디버깅 팁
- 일관된 들여쓰기 사용: 탭 대신 스페이스(권장)를 사용하거나, 설정에 맞춰 탭만 사용합니다.
- 에디터 설정 확인: VS Code, PyCharm 등에서 탭 크기(Tab Size)를 통일하세요.
- 자동 포맷터 사용: `black`이나 `autopep8` 같은 도구로 코드를 일괄 정리합니다.
- 작은 단위로 테스트: 큰 파일 대신 함수 단위로 실행해 보며 블록별 오류를 줄입니다.
- 에러 메시지 활용: 메시지의 화살표(^)와 줄 번호를 보고 정확한 위치를 파악합니다.
6. 추가 실습 및 심화 팁
1) 코드 에디터에서 View → Toggle Render Whitespace
기능을 사용해 보이지 않는 문자를 확인해 보세요.
2) 팀 프로젝트 시에는 `.editorconfig` 파일로 팀원 간 설정을 공유하여 통일성을 유지하세요.
3) `TabError`는 `IndentationError`의 하위 예외로, 탭·스페이스 혼용이 심각할 때 발생합니다.
4) Python 공식 문서를 참고해 예외 계층 구조를 이해하면 디버깅에 도움이 됩니다.
7. 정리 및 다음 단계
이번 챕터에서는 IndentationError의 정의, 주요 원인, 대표 사례, 해결 방법까지 단계별로 다뤘습니다. 다음 챕터에서는 NameError: 정의되지 않은 이름 사용 문제의 원인과 해결책을 살펴볼 예정이니 많은 관심 부탁드립니다.
'08.개발&프로그래밍 > 1.파이썬' 카테고리의 다른 글
4. Python TypeError(잘못된 자료형 연산) 완벽 가이드 (0) | 2025.07.15 |
---|---|
3. Python NameError(정의되지 않은 이름 사용) 완벽 가이드 (0) | 2025.07.15 |
문제 해결 - 1. Python SyntaxError(문법 에러) 완벽 가이드 (0) | 2025.07.15 |
4. AI 시대 파이썬 개발자 로드맵과 진로: 자기개발 & AI 활용 전략 (0) | 2025.07.15 |
3. Git과 GitHub 연동 기초: 버전 관리 시작하기 (0) | 2025.07.15 |