본문 바로가기
Error(Exception)/ERROR-PYTHON

[python] StopIteration

by 조조군 2024. 12. 3.
반응형

StopIteration 오류 정리


1. 오류 설명

StopIteration 오류는 Python의 반복(iterator)에서 발생하며, 반복이 끝났음을 나타냅니다. 주로 next() 함수를 호출하거나, 사용자 정의 반복자에서 더 이상 반환할 값이 없을 때 발생합니다. 일반적으로 for 루프와 같은 고수준 반복 구조는 이 오류를 내부적으로 처리하여 숨깁니다. 하지만 직접적으로 반복자를 사용할 때 StopIteration을 만나게 될 수 있습니다.


2. 오류 예시

  • 직접 반복자를 다룰 때:
    iterable = [1, 2, 3]
    iterator = iter(iterable)
    

print(next(iterator)) # 출력: 1
print(next(iterator)) # 출력: 2
print(next(iterator)) # 출력: 3
print(next(iterator)) # StopIteration 발생


- **사용자 정의 반복기에서 반복이 종료되었을 때:**
```python
class MyIterator:
    def __init__(self, limit):
        self.limit = limit
        self.counter = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.counter < self.limit:
            self.counter += 1
            return self.counter
        else:
            raise StopIteration

it = MyIterator(3)
print(next(it))  # 출력: 1
print(next(it))  # 출력: 2
print(next(it))  # 출력: 3
print(next(it))  # StopIteration 발생

3. 오류 해결책

  1. 안전한 반복:
    • for 루프를 사용하면 Python이 내부적으로 StopIteration을 처리하여 안전하게 반복을 수행합니다.
    • next()를 사용할 때 기본값을 제공하여 오류를 방지할 수 있습니다.
  2. 반복기 구현에서 처리:
    • 사용자 정의 반복기에서 StopIteration을 올바르게 처리하고 반복을 종료하도록 설계합니다.
  3. 예외 처리:
    • try...except 블록으로 StopIteration을 잡아 후속 작업을 처리합니다.

4. 오류 예제 코드 및 해결 코드

  • 오류 발생 코드
    iterable = [1, 2, 3]
    iterator = iter(iterable)
    

print(next(iterator)) # 출력: 1
print(next(iterator)) # 출력: 2
print(next(iterator)) # 출력: 3
print(next(iterator)) # StopIteration 발생


- **해결 코드: 안전한 반복 사용**
```python
iterable = [1, 2, 3]
iterator = iter(iterable)

while True:
    try:
        item = next(iterator)
        print(item)
    except StopIteration:
        print("반복이 종료되었습니다.")
        break
  • 해결 코드: 기본값 제공
    iterable = [1, 2, 3]
    iterator = iter(iterable)
    

print(next(iterator, "반복 종료")) # 출력: 1
print(next(iterator, "반복 종료")) # 출력: 2
print(next(iterator, "반복 종료")) # 출력: 3
print(next(iterator, "반복 종료")) # 출력: 반복 종료


- **사용자 정의 반복기 해결 코드**
```python
class MyIterator:
    def __init__(self, limit):
        self.limit = limit
        self.counter = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.counter < self.limit:
            self.counter += 1
            return self.counter
        else:
            raise StopIteration

it = MyIterator(3)

for value in it:
    print(value)  # 출력: 1, 2, 3

위의 해결책을 통해 StopIteration 오류를 안전하게 처리하거나 방지할 수 있습니다.

반응형

'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글

[python] SyntaxError  (2) 2024.12.05
[python] StopAsyncIteration  (0) 2024.12.04
[python] ReferenceError  (0) 2024.12.02
[python] RecursionError  (0) 2024.12.01
[python] OverflowError  (0) 2024.11.30

댓글