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