Adam Johnson wrote:

def takewhile_lessthan4(x):
    if x < 4:
        return x
    raise StopIteration

tuple(map(takewhile_lessthan4, range(9)))
# (0, 1, 2, 3)

I really don't understand why this is true, under 'normal' usage, map
shouldn't have any reason to silently swallow a StopIteration raised
_within_ the mapped function.

It's not -- the StopIteration isn't terminating the map,
it's terminating the iteration being performed by tuple().

It's easy to show that map() is not swallowing the
StopIteration:

>>> m = map(takewhile_lessthan4, range(9))
>>> next(m)
0
>>> next(m)
1
>>> next(m)
2
>>> next(m)
3
>>> next(m)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in takewhile_lessthan4
StopIteration

--
Greg

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to