summaryrefslogtreecommitdiff
path: root/tests/basics/generator_throw.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/generator_throw.py')
-rw-r--r--tests/basics/generator_throw.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/basics/generator_throw.py b/tests/basics/generator_throw.py
new file mode 100644
index 000000000..bf5ff33a2
--- /dev/null
+++ b/tests/basics/generator_throw.py
@@ -0,0 +1,43 @@
+# case where generator doesn't intercept the thrown/injected exception
+def gen():
+ yield 123
+ yield 456
+
+g = gen()
+print(next(g))
+try:
+ g.throw(KeyError)
+except KeyError:
+ print('got KeyError from downstream!')
+
+# case where a thrown exception is caught and stops the generator
+def gen():
+ try:
+ yield 1
+ yield 2
+ except:
+ pass
+g = gen()
+print(next(g))
+try:
+ g.throw(ValueError)
+except StopIteration:
+ print('got StopIteration')
+
+# generator ignores a thrown GeneratorExit (this is allowed)
+def gen():
+ try:
+ yield 123
+ except GeneratorExit:
+ print('GeneratorExit')
+ yield 456
+
+# thrown a class
+g = gen()
+print(next(g))
+print(g.throw(GeneratorExit))
+
+# thrown an instance
+g = gen()
+print(next(g))
+print(g.throw(GeneratorExit()))