Skip to content

Commit e6078df

Browse files
committed
tests/basics: Split out gen throw tests from yield-from-throw tests.
1 parent e9012a2 commit e6078df

3 files changed

Lines changed: 44 additions & 27 deletions

File tree

tests/basics/gen_yield_from_throw.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,3 @@ def gen2():
1616
print(next(g))
1717
except TypeError:
1818
print("got TypeError from downstream!")
19-
20-
# case where generator doesn't intercept the thrown/injected exception
21-
def gen3():
22-
yield 123
23-
yield 456
24-
25-
g3 = gen3()
26-
print(next(g3))
27-
try:
28-
g3.throw(KeyError)
29-
except KeyError:
30-
print('got KeyError from downstream!')
31-
32-
# case where a thrown exception is caught and stops the generator
33-
def gen4():
34-
try:
35-
yield 1
36-
yield 2
37-
except:
38-
pass
39-
g4 = gen4()
40-
print(next(g4))
41-
try:
42-
g4.throw(ValueError)
43-
except StopIteration:
44-
print('got StopIteration')

tests/basics/generator_throw.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# case where generator doesn't intercept the thrown/injected exception
2+
def gen():
3+
yield 123
4+
yield 456
5+
6+
g = gen()
7+
print(next(g))
8+
try:
9+
g.throw(KeyError)
10+
except KeyError:
11+
print('got KeyError from downstream!')
12+
13+
# case where a thrown exception is caught and stops the generator
14+
def gen():
15+
try:
16+
yield 1
17+
yield 2
18+
except:
19+
pass
20+
g = gen()
21+
print(next(g))
22+
try:
23+
g.throw(ValueError)
24+
except StopIteration:
25+
print('got StopIteration')
26+
27+
# generator ignores a thrown GeneratorExit (this is allowed)
28+
def gen():
29+
try:
30+
yield 123
31+
except GeneratorExit:
32+
print('GeneratorExit')
33+
yield 456
34+
35+
# thrown a class
36+
g = gen()
37+
print(next(g))
38+
print(g.throw(GeneratorExit))
39+
40+
# thrown an instance
41+
g = gen()
42+
print(next(g))
43+
print(g.throw(GeneratorExit()))

tests/run-tests

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def run_tests(pyb, tests, args, base_path="."):
352352
# Some tests are known to fail with native emitter
353353
# Remove them from the below when they work
354354
if args.emit == 'native':
355-
skip_tests.update({'basics/%s.py' % t for t in 'gen_yield_from gen_yield_from_close gen_yield_from_ducktype gen_yield_from_exc gen_yield_from_executing gen_yield_from_iter gen_yield_from_send gen_yield_from_stopped gen_yield_from_throw gen_yield_from_throw2 gen_yield_from_throw3 generator1 generator2 generator_args generator_close generator_closure generator_exc generator_name generator_pend_throw generator_return generator_send generator_pep479'.split()}) # require yield
355+
skip_tests.update({'basics/%s.py' % t for t in 'gen_yield_from gen_yield_from_close gen_yield_from_ducktype gen_yield_from_exc gen_yield_from_executing gen_yield_from_iter gen_yield_from_send gen_yield_from_stopped gen_yield_from_throw gen_yield_from_throw2 gen_yield_from_throw3 generator1 generator2 generator_args generator_close generator_closure generator_exc generator_name generator_pend_throw generator_return generator_send generator_throw generator_pep479'.split()}) # require yield
356356
skip_tests.update({'basics/%s.py' % t for t in 'bytes_gen class_store_class globals_del string_join'.split()}) # require yield
357357
skip_tests.update({'basics/async_%s.py' % t for t in 'def await await2 for for2 with with2 with_break with_return'.split()}) # require yield
358358
skip_tests.update({'basics/%s.py' % t for t in 'try_reraise try_reraise2'.split()}) # require raise_varargs

0 commit comments

Comments
 (0)