본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 082. StopIteration - generator exhausted

by about_IT 2025. 5. 30.
728x90

StopIteration: generator exhausted 오류는 제너레이터(generator) 또는 반복자의 반복이 끝났을 때 발생하는 예외입니다. 이 오류는 일반적으로 자동으로 처리되지만, 수동으로 next() 함수를 사용할 경우 반복이 끝났는지를 직접 확인하지 않으면 StopIteration 예외가 발생합니다.

파이썬의 반복 구조(for 루프 등)는 내부적으로 StopIteration 예외를 통해 반복 종료를 감지합니다. 하지만 이를 명시적으로 다루지 않으면 에러로 보일 수 있습니다.

● 오류 발생 예시

gen = (x for x in range(2))
print(next(gen))  # 0
print(next(gen))  # 1
print(next(gen))  # 오류 발생

세 번째 next() 호출은 반복이 끝난 상태에서 호출되므로 StopIteration이 발생합니다.

StopIteration

● 해결 방법

  • next() 사용 시 default 값 지정
  • try-except 블록으로 예외 처리
  • 제너레이터를 수동으로 사용할 경우, 루프 또는 조건으로 범위 제어

● 예시 코드 (예외 처리)

gen = (x for x in range(2))
try:
    while True:
        print(next(gen))
except StopIteration:
    print("제너레이터 종료")

● 자주 하는 실수

  • next() 반복 호출 시 종료 여부를 확인하지 않음
  • 반복자(iterator)를 재사용 가능하다고 착각
  • 루프 종료 후 next()로 다시 접근 시도

● 결론

StopIteration - generator exhausted는 반복이 끝난 제너레이터에 접근할 때 발생하는 예외입니다. 자동 루프 외에 next()를 수동으로 사용할 경우 종료 여부를 항상 고려하여 안전하게 반복을 제어해야 합니다.

728x90