[Guido] >> def first(it, /, default=None): >> it = iter(it) >> try: >> return next(it) >> except StopIteration: >> return default
[Greg Ewing <greg.ew...@canterbury.ac.nz>] > Can you provide any insight into why you think it's better for > it never to raise an exception, as opposed to raising something > other than StopIteration when the iterator is empty and no > default is specified? Worth pursuing. As Wes Turner's post just reminded me, the more-itertools `first()` raises an exception (ValueError) when the iterable argument is exhausted and a default is not supplied. And I think that's The Rightest Thing, for reasons you explained (repeated here for completeness, with no new comments from me, beyond that #2 is my most common use case):" > There seem to be two kinds of use case for this: > > 1. The iterator may or may not be empty, and you don't want > the hassle of having to catch an exception. > > 2. You expect the iterator to never be empty; if it is, then > it's a bug, and you would like to get an exception, but not > StopIteration because that can mess other things up. > > Your version of the function seems to be aimed exclusively > at case 1. If it were to raise ValueError on an empty > iterable unless a default were explicitly given, it would > address both cases. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5LFMUQIJCZIKBDBOGURBYQZWZ6URDYJK/ Code of Conduct: http://python.org/psf/codeofconduct/