Wyjątek StopIteration
Lekcja 3 z 13 w kursie Iteratory w Pythonie w Coddy.
Wyjątek StopIteration jest kluczowym elementem protokołu iteratorów w Pythonie. Sygnalizuje koniec sekwencji iteracji i odgrywa istotną rolę w kontrolowaniu działania iteratora. Przyjrzyjmy się temu wyjątkowi i jego znaczeniu.
Czym jest StopIteration?
StopIteration to wbudowany wyjątek w Pythonie, który jest zgłaszany, gdy iterator zostanie wyczerpany, czyli gdy nie ma już elementów do zwrócenia.
Kiedy zgłaszany jest StopIteration?
Python automatycznie zgłasza wyjątek StopIteration w dwóch głównych sytuacjach:
- Gdy funkcja
next()zostanie wywołana dla iteratora, w którym nie ma już żadnych elementów. - Gdy metoda
__next__()niestandardowego iteratora została zaimplementowana tak, aby zgłaszaćStopIterationna końcu iteracji.
Przykład StopIteration
Zobaczmy, jak działa StopIteration w przypadku prostego iteratora:
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # Wynik: 1
print(next(my_iterator)) # Wynik: 2
print(next(my_iterator)) # Wynik: 3
print(next(my_iterator)) # Wywołuje wyjątek StopIteration
W tym przykładzie, gdy przejdziemy już przez wszystkie elementy my_list, kolejne wywołanie next() zgłasza wyjątek StopIteration.
Znaczenie dla działania iteratora
Wyjątek StopIteration jest kluczowy z kilku powodów:
- Sygnalizowanie końca: Wyraźnie informuje, że iteracja dobiegła końca.
- Zakończenie pętli for: Pętle
forw Pythonie korzystają zStopIteration, aby wiedzieć, kiedy się zakończyć. - Kontrola niestandardowego iteratora: Podczas tworzenia niestandardowych iteratorów zgłoszenie
StopIterationpozwala określić, kiedy iteracja powinna się zakończyć.
Obsługa StopIteration
Chociaż pętle for automatycznie obsługują StopIteration, przy bezpośrednim użyciu next() możesz chcieć jawnie obsłużyć ten wyjątek:
my_iterator = iter([1, 2, 3])
try:
while True:
item = next(my_iterator)
print(item)
except StopIteration:
print("Iteration finished")
Ten kod wypisze liczby 1, 2 i 3, a następnie „Iteration finished”, gdy zostanie przechwycony wyjątek StopIteration.
Zrozumienie wyjątku StopIteration jest niezbędne podczas pracy z iteratorami w Pythonie, ponieważ zapewnia mechanizm pozwalający kontrolować i kończyć iteracje w ustandaryzowany sposób.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wyzwanie
ŁatwyUtwórz własny iterator generujący ciąg liczb pierwszych do podanego limitu. Iterator powinien używać wyjątku StopIteration, aby zasygnalizować koniec ciągu, gdy osiągnie limit lub go przekroczy.
Otrzymujesz:
- Liczbę całkowitą
limitjako dane wejściowe
Twój iterator powinien:
- Generować liczby pierwsze, zaczynając od 2
- Zgłaszać wyjątek
StopIteration, gdy następna liczba pierwsza przekroczyłaby podany limit
Zaimplementuj iterator jako klasę z metodami __iter__() i __next__(). Użyj metody __next__(), aby wygenerować następną liczbę pierwszą i obsłużyć wyjątek StopIteration.
Wypisz każdą wygenerowaną liczbę pierwszą w osobnym wierszu.
Dane wejściowe zostaną podane jako ciąg znaków reprezentujący liczbę całkowitą.
Spróbuj swoich sił
# Wczytaj dane wejściowe
limit = int(input())
class PrimeIterator:
def __init__(self, limit):
self.limit = limit
self.current = 2
def __iter__(self):
return self
def __next__(self):
# TODO: Zaimplementuj logikę generowania następnej liczby pierwszej
# Jeśli następna liczba pierwsza przekracza limit, zgłoś StopIteration
# Zwróć następną liczbę pierwszą, jeśli mieści się w limicie
pass
# Utwórz instancję PrimeIterator
prime_iter = PrimeIterator(limit)
# Iteruj po liczbach pierwszych i wypisz każdą z nich
try:
for prime in prime_iter:
print(prime)
except StopIteration:
pass # Koniec iteracjiWszystkie lekcje w sekcji Iteratory w Pythonie
2Tworzenie własnych iteratorów
Implementowanie __iter__()Implementowanie __next__()Iteratory nieskończonePoćwicz samodzielnie: Kompilator Python online