On Wed, Oct 13, 2021 at 2:39 AM Christopher Barker <python...@gmail.com> wrote: > > On Tue, Oct 12, 2021 at 4:51 AM Chris Angelico <ros...@gmail.com> wrote: >> >> > Exactly: simple usage of next is often a bug. We need to be careful about >> > this every time someone suggests that it's straight-forward to do >> > next(iter(obj)). > > <snip> >> >> Please give a real example of where calling first() and getting >> ValueError is safer than calling next(iter(x)) and getting >> StopIteration. So far, I am undeterred in believing that the two >> exceptions have equivalent effect if the caller isn't expecting them. > > > I don't know about safer, but it is a clear example of why using > next(iter(obj)) requires a pretty complete knowledge of the iteration > protocol. > > I can guarantee you I'd get some questions from my students when they got a > StopIterationError! > > If one DID write a first() function, it maybe or maybe not should raise a > different exception, but it should certainly provide a better error message: > > >>> next(iter([])) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > StopIteration > > Is not very helpful. >
If they're actually writing it explicitly, like that, then this is a perfect opportunity to teach the meanings of iterators and next(). If it's buried behind a first() function, it would simply be an error, just like [][0] is an error. Either way, there's no real difference between them, and asking "what is the first element of an empty collection?" is always going to result in an error. (Unless you are JavaScript, in which case the answer is "undefined, of course".) ChrisA _______________________________________________ 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/KMLY4U5VFJ6TMMLDSEWAPWMQEDELB5KW/ Code of Conduct: http://python.org/psf/codeofconduct/