1# Test proper handling of exceptions within generator across yield 2def gen(): 3 try: 4 yield 1 5 raise ValueError 6 except ValueError: 7 print("Caught") 8 yield 2 9 10for i in gen(): 11 print(i) 12 13 14# Test throwing exceptions out of generator 15def gen2(): 16 yield 1 17 raise ValueError 18 yield 2 19 yield 3 20 21g = gen2() 22print(next(g)) 23try: 24 print(next(g)) 25except ValueError: 26 print("ValueError") 27 28try: 29 print(next(g)) 30except StopIteration: 31 print("StopIteration") 32 33 34# Test throwing exception into generator 35def gen3(): 36 yield 1 37 try: 38 yield 2 39 except ValueError: 40 print("ValueError received") 41 yield 3 42 yield 4 43 yield 5 44 45g = gen3() 46print(next(g)) 47print(next(g)) 48print("out of throw:", g.throw(ValueError)) 49print(next(g)) 50try: 51 print("out of throw2:", g.throw(ValueError)) 52except ValueError: 53 print("Boomerang ValueError caught") 54