def f(): n = 0 while True: n = yield n + 1 print(n) g = f() try: g.send(1) except TypeError: print("caught") print(g.send(None)) print(g.send(100)) print(g.send(200)) def f2(): print("entering") for i in range(3): print(i) yield print("returning 1") print("returning 2") g = f2() g.send(None) g.send(1) g.send(1) try: g.send(1) except StopIteration: print("caught") try: g.send(1) except StopIteration: print("caught")