[Python] throw ad un generatore: perché non riparte dall'inizio?

Marco De Paoli depaolim a gmail.com
Gio 28 Lug 2022 08:56:46 CEST


ciao lista!
ho una domanda sui generatori
Mi farebbe molto comodo usare la possibilità di mandare una eccezione ad un
generatore: ma mi trovo con un comportamento imprevisto
Qui sotto trovate un frammento di codice che riproduce una sorta di "caso
minimo" di quella che mi sembra una anomalia
Se avete voglia di provarlo credo che il codice sia più o meno
autoesplicativo.
Quello che mi lascia perplesso è: perché il generatore, dopo aver gestito
l'eccezione, non riparte dal restituire il valore "A"?

---><--- begin test_gen.py ---><---
def gen():
    while True:
        try:
            yield "A"
            yield "B"
            yield "C"
        except Exception as ex:
            print("catched exception", ex)


g = gen()
you_can_specify_any_number_of_steps = 3
for idx in range(you_can_specify_any_number_of_steps):
    print("result:", g.send(None))
print("throw...")
g.throw(Exception("BOOM"))
print("result:", g.send(None), "*** I was expecting A and I get B, why?!?
***")
print("result:", g.send(None))

---><--- end test_gen.py ---><---
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20220728/c9241ff0/attachment.html>


Maggiori informazioni sulla lista Python