Skip to content

Commit 4a7b31f

Browse files
committed
py: Fix errors are suppressed in generator comprehensions
Sequence.Iterate does not handle exceptions. Iterate() should return error except StopIteration.
1 parent 0773b68 commit 4a7b31f

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

py/sequence.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,13 @@ func Iterate(obj Object, fn func(Object) bool) error {
9393
return err
9494
}
9595
for {
96-
item, finished := Next(iterator)
97-
if finished != nil {
96+
item, err := Next(iterator)
97+
if err != nil && err == StopIteration {
9898
break
9999
}
100+
if err != nil && err != StopIteration {
101+
return err
102+
}
100103
if fn(item) {
101104
break
102105
}

vm/tests/generators.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ def g2():
2525
yield i
2626
assert tuple(g2()) == (0,1,2,3,4)
2727

28+
doc="generator 3"
29+
try:
30+
list(ax for x in range(10))
31+
except NameError:
32+
ok = True,
33+
assert ok, "NameError not raised"
34+
2835
doc="yield from"
2936
def g3():
3037
yield "potato"

0 commit comments

Comments
 (0)