IndexError는 리스트나 튜플과 같은 시퀀스 자료형에서 유효 범위를 벗어난 인덱스에 접근하려고 할 때 발생하는 예외입니다. 예를 들어 요소가 5개뿐인 리스트의 여섯 번째 항목에 접근하면 이 오류가 발생합니다.
이러한 예외는 try-except 문을 사용하면 프로그램이 비정상적으로 종료되지 않도록 안전하게 처리할 수 있으며, 예외 객체를 통해 오류 메시지와 예외 타입까지 확인할 수 있습니다.
예제 코드
import sys
try:
my_list = [3, 7, 9, 4, 6]
print(my_list[6]) # 존재하지 않는 인덱스에 접근
except IndexError as e:
print("발생한 예외:", e)
print("예외 타입:", type(e).__name__)
실행 결과
발생한 예외: list index out of range 예외 타입: IndexError
리스트 my_list의 유효한 인덱스는 0부터 4까지이므로, 인덱스 6에 접근하는 순간 IndexError가 발생하고 except 블록이 이를 잡아냅니다. 이처럼 as e 구문을 사용하면 예외 객체를 변수에 담아 상세 정보를 확인할 수 있습니다.
IndexError를 예방하는 팁
- 길이 확인하기: 인덱스에 접근하기 전에
len(my_list)로 리스트의 길이를 먼저 확인하면 범위 초과 오류를 미리 방지할 수 있습니다. - 음수 인덱스 활용: 파이썬에서는
-1이 마지막 요소를 가리키므로, 마지막 항목에 접근할 때 유용합니다. - 반복문 사용: 인덱스를 직접 지정하는 대신
for item in my_list:처럼 요소를 순회하면 IndexError 발생 가능성 자체를 없앨 수 있습니다.
참고로 위 예제는 현재 표준인 파이썬 3 문법(print() 함수, type(e).__name__)으로 작성되었습니다. 구버전 파이썬 2에서는 print e와 sys.exc_type을 사용했지만, 파이썬 2는 이미 지원이 종료되었으므로 파이썬 3 방식을 사용하는 것이 좋습니다.