Skip to content

Commit 61fd20f

Browse files
committed
objgenerator: Implement throwing exceptions out of generator.
1 parent c0abc28 commit 61fd20f

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

py/objgenerator.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,10 @@ STATIC mp_obj_t gen_next_send(mp_obj_t self_in, mp_obj_t send_value) {
103103
return *self->sp;
104104

105105
case MP_VM_RETURN_EXCEPTION:
106+
self->ip = 0;
107+
nlr_jump(self->state[self->n_state - 1]);
108+
106109
default:
107-
// TODO
108110
assert(0);
109111
return mp_const_none;
110112
}

tests/basics/generator-exc.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,23 @@ def gen():
99

1010
for i in gen():
1111
print(i)
12+
13+
14+
# Test throwing exceptions out of generator
15+
def gen2():
16+
yield 1
17+
raise ValueError
18+
yield 2
19+
yield 3
20+
21+
g = gen2()
22+
print(next(g))
23+
try:
24+
print(next(g))
25+
except ValueError:
26+
print("ValueError")
27+
28+
try:
29+
print(next(g))
30+
except StopIteration:
31+
print("StopIteration")

0 commit comments

Comments
 (0)