파이썬에서는 코드 들여쓰기를 할 때 공백(space) 또는 탭(tab) 중 하나를 사용할 수 있습니다. 하지만 같은 코드 블록 안에서 두 방식을 섞어서 사용하면 "TabError: inconsistent use of tabs and spaces in indentation"(들여쓰기에서 탭과 공백의 일관성 없는 사용) 오류가 발생합니다.
이 글에서는 이 오류가 무엇을 의미하는지, 왜 발생하는지 살펴보고, 실제 예제를 통해 코드에서 이 문제를 해결하는 방법까지 단계별로 알아보겠습니다.
TabError란 무엇인가?
파이썬 스타일 가이드(PEP 8)에서는 공백을 사용한 들여쓰기를 권장하지만, 기술적으로는 탭과 공백 어느 쪽이든 사용할 수 있습니다.
파이썬에서 들여쓰기가 중요한 이유는, 이 언어가 중괄호({}) 같은 구문 대신 들여쓰기로 코드 블록의 시작과 끝을 구분하기 때문입니다. 즉, 들여쓰기는 어떤 코드 줄이 어떤 블록에 속하는지 파이썬 인터프리터에게 알려주는 역할을 합니다.
다음 프로그램을 살펴보겠습니다:
numbers = [8, 7, 9, 8, 7] def calculate_average_age(): average = sum(numbers) / len(numbers) print(average)
들여쓰기가 없으면 어떤 코드 줄이 calculate_average_age 함수에 속하고, 어떤 줄이 메인 프로그램에 속하는지 알 수 없습니다.
따라서 반드시 공백 또는 탭 중 한 가지 방식만 일관되게 사용해야 합니다. 두 방식을 섞어 사용하면 파이썬 인터프리터가 혼란스러워하며 "TabError: inconsistent use of tabs and spaces in indentation" 오류가 발생합니다.
오류 발생 예시
도넛 가게에서 발생한 구매 내역의 총합을 계산하는 프로그램을 만들어 보겠습니다. 먼저 구매 목록을 정의합니다:
purchases = [2.50, 4.90, 5.60, 2.40]
다음으로 "purchases" 리스트의 합계를 계산하는 함수를 정의합니다:
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
이 함수는 매개변수로 구매 목록 리스트를 하나 받으며, 지정된 리스트의 총합을 반환합니다. sum() 메서드를 사용하여 "purchases" 리스트에 있는 숫자들의 합계를 계산합니다.
이 코드를 텍스트 편집기에 복사해 보면 "return total" 줄은 공백으로 들여쓰기 되어 있고, "total = sum(purchases)" 줄은 탭으로 들여쓰기 되어 있다는 것을 눈치챌 수 있습니다. 바로 이 차이가 문제의 원인입니다.
다음으로 함수를 호출하고 반환값을 콘솔에 출력합니다:
total_purchases = calculate_total_purchases(purchases) print(total_purchases)
이 코드는 calculate_total_purchases() 함수를 호출하여 도넛 가게의 모든 구매 총액을 계산한 후, 그 값을 콘솔에 출력합니다. 코드를 실행하면 어떻게 될까요?
File "test1.py", line 5
return total
^
TabError: inconsistent use of tabs and spaces in indentation
코드 실행 결과 오류가 반환됩니다.
해결 방법
오류의 원인은 코드 들여쓰기에 공백과 탭을 함께 사용했기 때문입니다. 파이썬 프로그램에서는 반드시 두 방식 중 하나만 사용해야 합니다.
코드를 수정하기 위해 함수 전체에서 공백만 사용하도록 변경하겠습니다:
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
이제 코드는 4칸 공백으로 들여쓰기를 했습니다. 새로운 들여쓰기로 프로그램을 다시 실행해 보겠습니다:
15.4
프로그램이 도넛 구매 총액을 성공적으로 계산했습니다.
IDLE 편집기에서 들여쓰기 변환하기
IDLE 편집기를 사용한다면 다음 절차에 따라 코드 블록의 들여쓰기를 손쉽게 변환할 수 있습니다:
- 들여쓰기를 변경하려는 코드를 선택합니다
- "메뉴(Menu)" → "포맷(Format)" → "탭을 공백으로(Untabify region)"를 클릭합니다
- 사용하려는 들여쓰기 유형을 지정합니다
IDLE 편집기에서 문서의 포맷을 수정할 때 유용한 방법입니다. Sublime Text 등 다른 많은 편집기들도 파일의 들여쓰기를 변경하는 자체 기능을 제공합니다. 예를 들어 VS Code에서는 우측 하단 상태 표시줄의 들여쓰기 설정을 클릭하거나, 명령 팔레트(Ctrl+Shift+P)에서 "Convert Indentation to Spaces/Tabs" 기능을 사용하면 됩니다.
마무리
파이썬의 "TabError: inconsistent use of tabs and spaces in indentation" 오류는 코드 들여쓰기에 공백과 탭을 동시에 사용하려고 할 때 발생합니다.
이 오류를 해결하려면 프로그램 전체에서 공백 또는 탭 중 한 가지 방식만 사용하도록 통일하고, 선호하는 방식과 다른 들여쓰기를 모두 교체하면 됩니다. 이제 여러분도 프로 개발자처럼 이 오류를 해결할 수 있을 것입니다!