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

Python IndentationError: unexpected indent 오류 원인과 해결 방법

IndentationError(들여쓰기 오류)는 두 가지 중요한 역할을 합니다. 첫째, 코드의 가독성을 높여주고, 둘째, 파이썬 인터프리터가 코드를 정확하게 이해하도록 돕습니다. 하지만 불필요한 위치에 공백이나 탭을 추가하면 "IndentationError: unexpected indent" 오류가 발생합니다.

이 글에서는 이 오류가 무엇을 의미하는지, 왜 발생하는지 살펴보고, 실제 예제를 통해 프로그램에서 오류를 수정하는 방법까지 단계별로 알아보겠습니다.

IndentationError: unexpected indent란?

들여쓰기(indent)는 특정 줄의 코드가 어느 코드 블록에 속해 있는지 나타내는 일정 개수의 공백 또는 탭입니다. 다음 프로그램을 살펴보겠습니다.

def hello_world():
    print("Hello, world!")

위 코드에서는 hello_world()라는 함수 하나를 정의했습니다. 이 함수 안에는 print 문이 포함되어 있으며, 파이썬에게 이 코드 줄이 함수의 일부임을 알려주기 위해 들여쓰기를 사용했습니다.

들여쓰기는 공백 또는 탭 중 선호하는 방식으로 할 수 있습니다. 단, 다른 코드 블록에 속해야 하는 경우에만 들여쓰기를 해야 합니다. 들여쓰기가 필요한 대표적인 경우는 다음과 같습니다.

  • "if...else" 문
  • "try...except" 문
  • "for" 루프
  • 함수(function) 정의문

특수한 문장 안에 포함된 파이썬 코드는 반드시 일관되게 들여쓰기를 해야 합니다. 파이썬은 들여쓰기를 매우 엄격하게 강제합니다.

자바스크립트(JavaScript)와 같은 일부 프로그래밍 언어는 중괄호({})로 코드 블록을 구분하기 때문에 들여쓰기를 엄격하게 강제하지 않습니다. 반면 파이썬에는 이러한 기능이 없어 언어 자체가 들여쓰기에 크게 의존합니다.

"IndentationError: unexpected indent" 오류의 원인은 코드를 필요 이상으로 깊게 들여쓰거나, 한 줄의 코드를 들여쓸 때 너무 많은 탭과 공백을 사용했기 때문입니다.

그 외에 만날 수 있는 들여쓰기 관련 오류는 다음과 같습니다.

  • Unindent does not match any other indentation level (들여쓰기 수준이 기존 수준과 일치하지 않음)
  • Expected an indented block (들여쓰기된 블록이 필요함)

오류 발생 예제

사용자의 구매 목록을 순회하면서 25달러를 초과하는 구매 항목만 콘솔에 출력하는 프로그램을 만들어 보겠습니다.

먼저 구매 목록을 정의합니다.

purchases = [25.50, 29.90, 2.40, 57.60, 24.90, 1.55]

다음으로 구매 목록을 순회하며 25달러가 넘는 항목을 콘솔에 출력하는 함수를 정의합니다.

def show_high_purchases(purchases):
    for p in purchases:
        if p > 25.00:
            print("Purchase: ")
                print(p)

show_high_purchases() 함수는 하나의 인수, 즉 검색할 구매 목록을 받습니다. 이 함수는 목록을 반복(iterate)하면서 if 문으로 각 구매 항목이 25달러를 초과하는지 확인합니다.

구매 금액이 25달러보다 크면 콘솔에 "Purchase:"라는 문구가 출력되고, 이어서 해당 구매의 가격이 출력됩니다. 그렇지 않으면 아무 일도 일어나지 않습니다.

코드를 실행하기 전에 함수를 호출하고 구매 목록을 매개변수로 전달합니다.

show_high_purchases(purchases)

코드를 실행해 결과를 확인해 보겠습니다.

  File "main.py", line 7
	print(p)
	^
IndentationError: unexpected indent

코드가 성공적으로 실행되지 않았습니다.

해결 방법

파이썬 오류를 만났을 때는 항상 전체 오류 메시지를 읽고 무슨 일이 일어났는지 파악해야 합니다. 문제는 7번째 줄, 즉 구매 금액을 출력하는 부분에서 발생한 것으로 보입니다.

if p > 25.00:
    print("Purchase: ")
        print(p)

두 번째 print() 문이 우연히 더 깊게 들여쓰기 되어 있습니다. 두 번째 print() 문은 별도의 코드 블록에 속한 것이 아니라 여전히 if 문의 일부이기 때문에 오류가 발생합니다.

이 오류를 해결하려면 모든 print() 문의 들여쓰기를 일관되게 맞춰야 합니다.

if p > 25.00:
    print("Purchase: ")
    print(p)

print() 문은 같은 if 문에 속하므로 동일한 수준으로 들여쓰기해야 합니다. 위 코드에서 이렇게 수정했습니다.

다시 코드를 실행해 보겠습니다.

Purchase:
25.5
Purchase:
29.9
Purchase:
57.6

이제 코드가 25달러를 초과하는 모든 구매 항목을 콘솔에 성공적으로 출력합니다.

결론

"IndentationError: unexpected indent" 오류는 코드 줄을 필요 이상으로 많이 들여쓰기 했을 때 발생합니다. 이 오류를 해결하려면 모든 코드의 들여쓰기를 일관되게 유지하고 불필요한 들여쓰기가 없는지 확인해야 합니다.

이제 여러분도 파이썬 전문가처럼 이 오류를 해결할 수 있습니다!