Eccezione StopIteration
Lezione 3 di 13 del corso Iteratori in Python di Coddy.
L'eccezione StopIteration è un componente fondamentale del protocollo degli iteratori di Python. Segnala la fine di una sequenza di iterazione e svolge un ruolo essenziale nel controllare il comportamento degli iteratori. Esploriamo questa eccezione e la sua importanza.
Che cos'è StopIteration?
StopIteration è un'eccezione integrata in Python che viene sollevata quando un iteratore è esaurito, ovvero non ci sono altri elementi da restituire.
Quando viene sollevata StopIteration?
L'eccezione StopIteration viene sollevata automaticamente da Python in due casi principali:
- Quando la funzione
next()viene chiamata su un iteratore che non ha altri elementi. - Quando il metodo
__next__()di un iteratore personalizzato è implementato in modo da sollevareStopIterational termine dell'iterazione.
Esempio di StopIteration
Vediamo come funziona StopIteration con un semplice iteratore:
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # Salida: 1
print(next(my_iterator)) # Salida: 2
print(next(my_iterator)) # Salida: 3
print(next(my_iterator)) # Lanza StopIteration
In questo esempio, dopo aver iterato su tutti gli elementi di my_list, la chiamata successiva a next() solleva un'eccezione StopIteration.
Importanza nel comportamento degli iteratori
L'eccezione StopIteration è fondamentale per diversi motivi:
- Segnalare la fine: fornisce un segnale chiaro che l'iterazione è giunta al termine.
- Terminazione dei cicli For: i cicli
fordi Python si basano suStopIterationper sapere quando terminare. - Controllo degli iteratori personalizzati: quando crei iteratori personalizzati, sollevare
StopIterationti consente di definire quando l'iterazione deve terminare.
Gestire StopIteration
Sebbene i cicli for gestiscano automaticamente StopIteration, quando usi direttamente next() potresti voler gestire esplicitamente questa eccezione:
my_iterator = iter([1, 2, 3])
try:
while True:
item = next(my_iterator)
print(item)
except StopIteration:
print("Iteration finished")
Questo codice stampa i numeri 1, 2 e 3, seguiti da "Iteration finished" quando viene intercettata l'eccezione StopIteration.
Comprendere l'eccezione StopIteration è essenziale per lavorare con gli iteratori in Python, poiché fornisce il meccanismo per controllare e terminare le iterazioni in modo standardizzato.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
FacileCrea un iteratore personalizzato che generi una sequenza di numeri primi fino a un limite specificato. L'iteratore dovrebbe usare l'eccezione StopIteration per segnalare la fine della sequenza quando raggiunge o supera il limite.
Ti viene fornito quanto segue:
- Un intero
limitcome input
Il tuo iteratore dovrebbe:
- Generare numeri primi a partire da 2
- Sollevare un'eccezione
StopIterationquando il numero primo successivo supererebbe il limite specificato
Implementa l'iteratore come una classe con i metodi __iter__() e __next__(). Usa il metodo __next__() per generare il numero primo successivo e gestire l'eccezione StopIteration.
Stampa ogni numero primo generato su una nuova riga.
L'input verrà fornito come una stringa che rappresenta un intero.
Provalo tu
# Leggi l'input
limit = int(input())
class PrimeIterator:
def __init__(self, limit):
self.limit = limit
self.current = 2
def __iter__(self):
return self
def __next__(self):
# TODO: Implementa la logica per generare il prossimo numero primo
# Se il prossimo numero primo supera il limite, solleva StopIteration
# Restituisci il prossimo numero primo se rientra nel limite
pass
# Crea un'istanza di PrimeIterator
prime_iter = PrimeIterator(limit)
# Itera sui numeri primi e stampa ciascuno di essi
try:
for prime in prime_iter:
print(prime)
except StopIteration:
pass # Fine dell'iterazioneTutte le lezioni di Iteratori in Python
Esercitati da solo: Compilatore Python online