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

Python에서 빈 리스트 예외(IndexError)를 처리하는 가장 좋은 방법

파이썬에서 리스트(List)는 순서가 있는 요소들의 집합입니다. 리스트의 각 요소는 0부터 시작하는 인덱스로 접근하며, 유효한 인덱스 범위는 0부터 '리스트 길이 - 1'까지입니다. 만약 이 범위를 벗어난 인덱스에 접근하면 IndexError 예외가 발생합니다.

빈 리스트에서 발생하는 IndexError

특히 주의해야 할 상황은 리스트가 비어 있을 때입니다. 빈 리스트에 대해 pop() 메서드를 호출하거나 존재하지 않는 인덱스에 접근하면 즉시 IndexError가 발생합니다.

다음 예제는 무한 루프(while True)를 사용하여 리스트에서 한 번에 하나씩 요소를 꺼내(pop) 출력하는 코드입니다. 마지막 요소까지 모두 꺼낸 후에도 루프는 계속 실행되려고 하기 때문에 IndexError가 발생하고, 이를 try-except 구문으로 잡아내어 루프를 종료합니다.

a=[1,2,3]
while True:
    try:
        b=a.pop()
        print (b)
    except (IndexError):
        break

더 파이썬다운(Pythonic)한 대안

try-except 방식도 올바른 처리법이지만, 파이썬에서는 예외가 발생하기 전에 조건을 검사하는 방식이 더 간결하고 가독성이 좋을 수 있습니다.

1. 리스트 자체를 조건으로 활용

빈 리스트는 불리언 평가에서 False로 취급되므로, 아래와 같이 작성하면 예외 처리 없이 깔끔하게 해결됩니다.

a=[1,2,3]
while a:
    print(a.pop())

2. 길이 검사 후 처리

인덱스로 직접 접근해야 하는 경우에는 len()으로 범위를 미리 확인하는 것이 안전합니다.

a=[1,2,3]
if len(a) > 0:
    print(a[-1])
else:
    print("리스트가 비어 있습니다.")

정리

  • 리스트 인덱스는 0부터 시작하며, 범위를 벗어나면 IndexError가 발생합니다.
  • 예외 발생이 예상되는 코드는 try-except로 감싸 안전하게 처리할 수 있습니다.
  • 다만 빈 여부를 먼저 확인하는 방식(while a:, len() 검사)이 더 직관적이고 효율적인 경우가 많습니다.