diff --git a/py/sequence.go b/py/sequence.go index f78932ba..53e78295 100644 --- a/py/sequence.go +++ b/py/sequence.go @@ -93,10 +93,13 @@ func Iterate(obj Object, fn func(Object) bool) error { return err } for { - item, finished := Next(iterator) - if finished != nil { + item, err := Next(iterator) + if err == StopIteration { break } + if err != nil { + return err + } if fn(item) { break } diff --git a/vm/tests/generators.py b/vm/tests/generators.py index 6fd4210d..44837bee 100644 --- a/vm/tests/generators.py +++ b/vm/tests/generators.py @@ -25,6 +25,14 @@ def g2(): yield i assert tuple(g2()) == (0,1,2,3,4) +doc="generator 3" +ok = False +try: + list(ax for x in range(10)) +except NameError: + ok = True +assert ok, "NameError not raised" + doc="yield from" def g3(): yield "potato"