generator_exc.py 907 B

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