파이썬 IndexError: list index out of range 오류 완벽 해부 및 해결 가이드

Illustration of a Python code editor showing an IndexError: list index out of range message, with a magnifying glass highlighting the error
< Python code editor with an IndexError >

‘IndexError: list index out of range’는 파이썬 초보자들이 자주 마주치는 오류입니다. 이 오류는 리스트에서 잘못된 인덱스를 호출할 때 발생하는데, 겁먹을 필요 없습니다! 이 가이드를 통해 오류의 원인, 예방 방법, 그리고 실전 해결법을 쉽고 자세히 배워보겠습니다.


학습 목표

  • IndexError: list index out of range 오류가 왜 발생하는지 이해하기
  • 오류를 예방하고 해결하는 다양한 방법 배우기
  • 실제 코드를 통해 문제를 해결하는 법 익히기

목차

  • 오류란 무엇인가?
  • 오류가 발생하는 이유
  • 자주 하는 실수
  • 오류 예방을 위한 3가지 핵심 방법
  • 실전 예제와 해결 코드
  • 직접 해보는 미션
  • 다음에 배울 내용


1. 오류란 무엇인가?

파이썬을 배우다 보면 이런 오류 메시지를 볼 때가 있습니다:


IndexError: list index out of range

이 메시지는 “리스트에서 존재하지 않는 위치(인덱스)를 부르려고 했다”는 뜻입니다. 처음 보면 당황스럽지만, 이건 아주 흔한 실수 때문에 생기는 오류입니다. 예를 들어, 리스트에 3개의 항목이 있는데 4번째 항목을 부르려고 하면 파이썬이 “그런 건 없어!”라고 알려주는 거예요.



2. 오류가 발생하는 이유

이 오류는 리스트의 인덱스를 잘못 다룰 때 발생합니다. 파이썬 리스트는 각 항목에 번호(인덱스)를 붙여 관리합니다. 중요한 점은:

  • 인덱스는 0부터 시작합니다.
  • 리스트에 3개의 항목이 있다면, 인덱스는 0, 1, 2까지 존재합니다.
  • 존재하지 않는 인덱스(예: 3, 4, …)를 호출하면 IndexError가 발생합니다.

간단한 예시


my_list = [10, 20, 30]  # 3개의 항목 (인덱스: 0, 1, 2)
print(my_list[3])       # 오류! 인덱스 3은 존재하지 않음

결과:


IndexError: list index out of range

위 코드에서 my_list는 3개의 항목만 가지고 있으므로 인덱스는 0~2까지만 유효합니다. my_list[3]은 없는 위치를 호출했기 때문에 오류가 나는 거죠.



3. 자주 하는 실수

이 오류는 보통 다음 3가지 상황에서 자주 발생합니다. 각 상황을 이해하면 실수를 줄이는 데 큰 도움이 됩니다!

실수 설명
인덱스 범위 착각 리스트에 3개의 항목이 있으면 인덱스는 0~2까지만 존재합니다. 그런데 실수로 3번이나 그 이상을 호출하면 오류가 납니다.
반복문에서 잘못된 인덱스 사용 forwhile 반복문에서 리스트 길이를 초과하는 인덱스를 호출하면 오류가 발생합니다.
빈 리스트 접근 리스트가 비어있는데([]) 인덱스(예: [0])를 호출하려 하면 오류가 납니다.

예시: 반복문 실수


my_list = [1, 2, 3]
for i in range(4):  # 0, 1, 2, 3까지 반복
    print(my_list[i])  # 인덱스 3에서 오류 발생!

팁: 인덱스는 항상 0부터 시작하고, 리스트 길이보다 큰 숫자는 호출할 수 없다는 점을 기억하세요!


Infographic of a Python list with indices and three panels showing len(), try-except, and enumerate() methods to prevent IndexError
< Python list [10, 20, 30] >

4. 오류 예방을 위한 3가지 핵심 방법

이제 이 오류를 피하는 실용적인 방법을 배워볼게요. 다음 3가지 방법을 사용하면 안전하게 코드를 작성할 수 있습니다.

방법 1: 리스트 길이 확인하기 (len() 사용)

리스트에 접근하기 전에 len() 함수로 리스트 길이를 확인하세요. 이렇게 하면 인덱스가 유효한지 미리 체크할 수 있습니다.


my_list = [10, 20, 30]
if len(my_list) > 2:  # 인덱스 2가 존재하는지 확인
    print(my_list[2])  # 안전하게 출력
else:
    print("인덱스가 범위를 벗어났습니다.")

결과:


30

방법 2: try-except로 예외 처리하기

try-except 구문을 사용하면 인덱스 오류가 발생해도 프로그램이 멈추지 않고 부드럽게 처리할 수 있습니다.


my_list = [10, 20, 30]
try:
    print(my_list[5])  # 존재하지 않는 인덱스
except IndexError:
    print("인덱스 범위를 벗어났습니다!")

결과:


인덱스 범위를 벗어났습니다!

방법 3: enumerate()로 안전한 반복문 작성

리스트를 반복할 때 enumerate()를 사용하면 인덱스와 값을 함께 가져와서 실수를 줄일 수 있습니다.


my_list = [10, 20, 30]
for index, value in enumerate(my_list):
    print(f"인덱스 {index}: 값 {value}")

결과:


인덱스 0: 값 10
인덱스 1: 값 20
인덱스 2: 값 30

enumerate()는 인덱스를 직접 계산할 필요 없이 리스트를 안전하게 순회할 수 있게 해줍니다.



5. 실전 예제와 해결 코드

이제 실제로 오류가 나는 코드를 보고, 이를 어떻게 고치는지 배워봅시다.

잘못된 코드


fruits = ['apple', 'banana', 'cherry']
print(fruits[3])  # 오류 발생!

결과:


IndexError: list index out of range

문제 원인: fruits 리스트는 3개의 항목(인덱스 0~2)만 있는데, 인덱스 3을 호출했습니다.

수정된 코드


fruits = ['apple', 'banana', 'cherry']
if len(fruits) > 3:
    print(fruits[3])
else:
    print("해당 인덱스에 값이 없습니다.")

결과:


해당 인덱스에 값이 없습니다.

설명: len(fruits)로 리스트 길이를 확인한 뒤, 인덱스 3이 유효하지 않음을 알려줍니다. 이렇게 하면 오류 없이 안전하게 실행됩니다.

추가 예제: 빈 리스트 처리


empty_list = []
if len(empty_list) > 0:
    print(empty_list[0])
else:
    print("리스트가 비어있습니다.")

결과:


리스트가 비어있습니다.


6. 직접 해보는 미션

이제 여러분이 직접 코드를 작성해볼 차례입니다! 다음 리스트를 사용해서 문제를 해결해보세요:


colors = ['red', 'green', 'blue']
  • colors 리스트의 모든 항목을 안전하게 출력하는 코드를 작성하세요.
  • 인덱스 오류가 나지 않도록 len() 함수와 조건문을 사용하세요.
  • (보너스) try-except를 사용해서 인덱스 5를 호출했을 때의 오류를 처리해보세요.

예시 답변


colors = ['red', 'green', 'blue']

# 모든 항목 안전하게 출력
for index, color in enumerate(colors):
    if index < len(colors):
        print(f"인덱스 {index}: {color}")

# 인덱스 5 호출 시 오류 처리
try:
    print(colors[5])
except IndexError:
    print("인덱스 5는 존재하지 않습니다!")

결과:


인덱스 0: red
인덱스 1: green
인덱스 2: blue
인덱스 5는 존재하지 않습니다!


7. 다음에 배울 내용

이번 가이드에서는 IndexError의 원인과 해결법을 배웠습니다. 다음 단계에서는 리스트를 안전하게 다루는 고급 기술을 배워볼게요! 예를 들어:

  • forwhile 반복문에서 리스트를 다루는 방법
  • 리스트 컴프리헨션(List Comprehension)으로 효율적인 코드 작성
  • 다양한 리스트 메서드(append, pop, remove 등) 활용법


요약

  • IndexError: list index out of range는 리스트에서 존재하지 않는 인덱스를 호출할 때 발생합니다.
  • 이를 피하려면:
    1. len()으로 리스트 길이를 확인
    2. try-except로 예외 처리
    3. enumerate()로 안전한 반복문 작성
  • 실전 예제와 미션을 통해 직접 코드를 작성해보면서 익숙해지세요!


이 가이드를 통해 IndexError를 완벽히 정복했다면, 이제 어떤 리스트든 자신 있게 다룰 수 있을 거예요! 🚀