On Tue, Mar 1, 2022 at 4:51 PM Steven D'Aprano <st...@pearwood.info> wrote:
> Then Python is the wrong language for you, because it uses exceptions to > direct control flow *wink* > > The iteration protocol uses StopIteration to end iteration. The older > sequence protocol uses IndexError for the same purpose. > I think it's better to say that exceptions are used in these cases to cover for the lack of disjoint-union types. Many functions return "a value or no value". When the values they can return are limited, a value they can't return is often used as a stand-in for "no value", like None or NotImplemented, or -1 for find(). When that isn't the case, an exception tends to be used, although letting the caller choose a sentinel is also popular. Haskell tends to use Maybe in all of these cases, because it's a disjoint union: the no-value return can't overlap with the yes-value returns, so there's never a need for anything else. (And it forces you to unwrap the returned value, so you can't forget to check for the no-value case.) The MyBreak proposal doesn't really fit that pattern. I've never seen it used, and I feel like it would be rejected in most places that have style guides and code review, but perhaps I'm wrong.
_______________________________________________ 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/PFJS2MLN5BRFTC53BZDFJ2Z3L7O7LWIJ/ Code of Conduct: http://python.org/psf/codeofconduct/