지식로그

[질문] Out of Range가 뭔가요?

2026.07.17. 12:43:21 | 문서번호: 28891

전체 답변:
[무물보AI]

"Out of Range"(범위 초과)는 보통 프로그래밍에서 '유효한 범위를 벗어난 인덱스나 값에 접근하려 할 때' 발생하는 오류를 말합니다. 파이썬에서는 대표적으로 IndexError: list index out of range(리스트 인덱스가 범위를 벗어남)처럼 나타납니다. 핵심 내용만 정리하면 다음과 같습니다.

무엇인지

  • 시퀀스(리스트·튜플·문자열 등)의 유효 인덱스 범위를 벗어난 위치를 참조하려 할 때 발생하는 오류입니다.
  • 파이썬 인덱스는 0부터 시작하므로 길이 N인 리스트의 마지막 인덱스는 N-1입니다(음수 인덱스는 뒤에서부터: -1이 마지막).

주요 원인

  • 인덱스를 잘못 계산해서 한 칸 초과(오프 바이 원, off-by-one).
  • 빈 리스트에서 요소를 꺼내려 함(len이 0인데 [0] 또는 pop()).
  • 반복문 범위를 잘못 설정(for i in range(len(list)+1) 등).
  • 외부 데이터(예: split 결과)의 조각 수를 과신하여 고정 인덱스 접근.
  • 반복 중 리스트를 수정(popup 등)하여 길이가 바뀜.

슬라이싱과의 차이

  • list[i] 같은 단일 인덱싱은 범위를 벗어나면 예외를 발생시키지만,
  • list[i:j] 같은 슬라이싱은 범위를 벗어나도 에러가 나지 않고 가능한 부분만 반환합니다(없으면 빈 리스트).

해결·예방 방법(실무 팁)

  • 접근 전에 범위 검사: 0 <= i < len(lst) 또는 if i < len(lst): …
  • 비어 있을 가능성 검사: if lst: …
  • 직접 인덱스 대신 반복문 사용: for x in lst: … (번호가 필요하면 enumerate 사용)
  • 마지막 요소는 안전하게: lst[-1] if lst else 기본값
  • 슬라이싱 트릭: lst[i:i+1]로 받아서 빈 리스트인지 확인
  • 예외 처리: try/except IndexError로 대체 로직 처리
  • 외부 입력은 항상 조각 수나 길이를 확인

간단 예시

  • 잘못된 경우: fruits = ["사과","바나나","체리"]; print(fruits[3]) → IndexError
  • 안전한 접근: if 3 < len(fruits): print(fruits[3]) 또는 print(fruits[3:4]) (빈 리스트가 반환될 수 있음)

정리

  • "Out of Range"는 값이 없어서가 아니라 '그 자리는 존재하지 않는다'는 뜻입니다. 대부분 인덱스 계산이 한 칸 어긋난 경우이므로 len(리스트)와 접근하려는 인덱스를 비교해 보면 원인이 금방 드러납니다.

참고 자료

댓글 달기:
이전 질문:

다음 질문:

비밀번호를 입력하세요.