오류/파이썬

[Python 파이썬] IndexError 오류 해결 방법

낄리 2026. 1. 16. 18:00

 

파이썬에서 데이터를 리스트(List)나 튜플(Tuple)로 관리하다 보면 가장 흔하게 마주치는 에러가 바로 IndexError: list index out of range입니다.

 


1. IndexError: list index out of range 왜 발생할까?

이 에러의 메시지를 직역하면 "리스트의 인덱스 범위를 벗어났다"는 뜻입니다. 파이썬의 리스트는 0부터 시작하는 인덱스 번호를 가지고 있는데, 존재하지 않는 번호를 호출할 때 발생합니다.

대표적인 발생 상황

  • 빈 리스트 접근: 데이터가 하나도 없는 리스트에서 첫 번째 요소([0])를 꺼내려 할 때
  • 오프 바이 원(Off-by-one) 에러: 리스트의 길이가 5인데 인덱스 5를 호출하는 경우 (인덱스는 0, 1, 2, 3, 4까지만 존재)
  • 반복문 조건 설정 실수: 리스트의 길이를 초과하여 반복 횟수를 지정했을 때
# 오류 사례
fruits = ["apple", "banana"]
print(fruits[2]) # IndexError 발생 (인덱스는 0, 1만 존재)

# 빈 리스트 사례
empty_list = []
print(empty_list[0]) # IndexError 발생

2. IndexError 해결을 위한 3가지 실무 전략

단순히 인덱스 숫자를 수정하는 것보다, 코드 자체에서 에러를 방지하는 구조를 만드는 것이 중요합니다.

① 리스트 길이 확인 (len() 활용)

가장 기본적이면서도 확실한 방법입니다. 인덱스에 접근하기 전, 리스트에 데이터가 있는지와 내가 찾는 인덱스가 범위 안에 있는지 조건문으로 확인합니다.

if len(fruits) > 2:
    print(fruits[2])
else:
    print("해당 인덱스에 데이터가 없습니다.")

② 예외 처리 (try-except)

데이터가 불규칙하게 들어오거나, 오류 발생 시 프로그램이 중단되지 않고 다음 단계를 수행해야 할 때 유용합니다.

try:
    target = my_list[idx]
except IndexError:
    target = None  # 기본값 할당

③ 안전한 슬라이싱(Slicing) 활용

파이썬 슬라이싱의 놀라운 특징은 범위를 벗어나도 에러를 내지 않는다는 점입니다. 특정 인덱스의 요소를 안전하게 가져오고 싶을 때 활용할 수 있습니다.

# 인덱스 10이 없어도 에러 대신 빈 리스트 [] 반환
safe_item = my_list[10:11] 

3. 반복문에서 IndexError 예방하기

리스트를 순회할 때 인덱스 번호를 직접 계산하다 보면 실수가 잦습니다. 파이썬다운(Pythonic) 방식으로 코드를 작성하면 IndexError를 원천 차단할 수 있습니다.

인덱스 대신 직접 순회하기

직접 인덱스 i를 관리하는 대신, 리스트의 요소를 바로 꺼내는 for item in list: 형식을 사용하세요.

enumerate() 함수 활용

값과 인덱스가 동시에 필요하다면 range(len(list)) 대신 enumerate()를 사용하는 것이 훨씬 안전하고 가독성이 좋습니다.

# 권장하는 방식
for index, fruit in enumerate(fruits):
    print(f"{index}번째 과일은 {fruit}입니다.")

핵심 요약 정리

  1. IndexError는 리스트에 존재하지 않는 위치 번호를 호출할 때 발생한다.
  2. 파이썬의 인덱스는 0부터 시작하며, 마지막 인덱스는 (리스트 길이 - 1)이다.
  3. 접근 전 len() 함수로 길이를 체크하거나, try-except로 예외 처리를 한다.
  4. 반복문에서는 인덱스 계산보다 enumerate()직접 순회 방식을 사용하여 실수를 방지하자.

IndexError는 알고리즘을 짤 때나 대량의 데이터를 처리할 때 자주 우리를 괴롭히지만, 파이썬의 인덱싱 규칙만 정확히 이해하면 아주 쉽게 해결할 수 있습니다. 오늘 알려드린 안전한 접근법들을 통해 더 견고한 코드를 작성해 보시기 바랍니다!