반응형
오류: GeneratorExit
1. 오류 설명
GeneratorExit
는 제너레이터(generator)가 종료될 때 발생하는 예외입니다. 이는 close()
메서드가 호출될 때 내부적으로 발생하며, 제너레이터가 정리 작업을 수행할 수 있도록 설계되었습니다. GeneratorExit
는 제너레이터 내부에서 처리할 필요가 거의 없으며, 처리하더라도 반드시 재발생시켜야 합니다. 이 예외는 StopIteration
과 비슷하지만, 제너레이터 종료 시에만 발생한다는 점에서 다릅니다.
2. 오류 예시
def my_generator():
try:
yield 1
yield 2
except GeneratorExit:
print("Generator is closing!")
gen = my_generator()
next(gen) # 1
gen.close() # GeneratorExit 발생
출력:
Generator is closing!
3. 오류 해결책
- 정상적인 종료 처리:
close()
를 호출하기 전에 제너레이터의 작업을 모두 끝내는 것이 가장 좋습니다.- 제너레이터 내부에서
GeneratorExit
를 캐치하여 적절한 정리 작업을 수행한 뒤 재발생시켜야 합니다.
- 예외를 재발생시키기:
GeneratorExit
를 처리한 후 반드시raise
를 통해 예외를 다시 발생시켜야 합니다.- 이를 하지 않으면 제너레이터의 종료가 제대로 이루어지지 않습니다.
4. 오류 예제 코드 및 해결 코드
오류 코드
def faulty_generator():
try:
yield "Hello"
yield "World"
except GeneratorExit:
print("Closing generator...")
# 여기서 GeneratorExit를 다시 발생시키지 않음 -> 문제 발생
print("Generator closed.")
gen = faulty_generator()
next(gen) # "Hello"
gen.close() # GeneratorExit 발생, 이후 제너레이터 비정상 종료
해결 코드
def proper_generator():
try:
yield "Hello"
yield "World"
except GeneratorExit:
print("Closing generator...")
raise # GeneratorExit를 반드시 다시 발생시킴
gen = proper_generator()
next(gen) # "Hello"
gen.close() # GeneratorExit 발생, 정상적으로 처리 후 종료
출력:
Closing generator...
이처럼 GeneratorExit
는 정상적인 제너레이터 종료 과정에서 발생하는 예외이며, 이를 재발생시키는 것이 중요합니다.
반응형
'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글
[python] RuntimeError (0) | 2024.11.22 |
---|---|
[python] ImportError (0) | 2024.11.22 |
[python] FloatingPointError (2) | 2024.11.20 |
[python] EOFError (0) | 2024.11.19 |
[python] PythonFinalizationError (0) | 2024.11.18 |
댓글