> > Reading between the lines, I *think* that you want the match statement > to catch the exception that you get when the attribute lookup fails, am > I right?
Yes! I was hoping there could be some syntax to extend pattern matching to handle exceptions such that we could handle patterns with multiple types of exceptions like so: match *this_raises_an_exception*, *this_raises_another_exception*: case *AttributeError*, *TypeError*: print("catches attribute and type errors") case *AttributeError*, *AttributeError*: print("catches attribute and attribute") case *Exception*, *Exception*: print("catches the remaining exceptions") case *x*, *y*: print(f"{x} and {y}") case *_*, *_*: print("everything else") Any thoughts on this kind of syntax? Maybe the author could explicitly distinguish that an exception might be raised by using *with Exception *like so: match *this_raises_an_exception*, *this_raises_another_exception** with Exception:* On Mon, Jan 3, 2022 at 7:25 PM Steven D'Aprano <st...@pearwood.info> wrote: > Hi Elvis, > > > On Sat, Jan 01, 2022 at 12:59:32AM -0500, elvis kahoro wrote: > > > The functionality that I'm thinking about is: > > > > match (named_tuple_object.*missing_attribute*, a_random_string): > > case *AttributeError*, "Catching an attribute error": > > print("Catches as attribute error") > > case *err:= AttributeError*, "Assigns an attribute error as err": > > print(f"This is the captured attribute error: {*err*}") > > Reading between the lines, I *think* that you want the match statement > to catch the exception that you get when the attribute lookup fails, am > I right? > > The problem here is that exceptions are values that can already be > matched, and the regular pattern matching rules apply: > > > >>> spam = (AttributeError, "eggs") > >>> match spam: > ... case (Exception, str): > ... print("matched") > ... > matched > > > So `case Exception` is going to match the exception as a class or > instance. We would need new syntax to match a *raised* exception. > > I propose: > > match expression: > except exceptions: > block > # regular cases follow after the except block > > which will only catch exceptions raised when evaluating the match > expression. That is, equivalent to: > > try: > temp = expression > except exceptions: > block > else: > match temp: > # regular cases follow here > > except that there is no actual "temp" variable created. > > To be clear, the except block must come first, ahead of all the cases. > > > -- > Steve > _______________________________________________ > 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/WUUGAQAUBHXLVJFV6JFGXZH7VBIX24K3/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ 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/KGPMOW6CM46FUBUN6YPSC4NTY6WQWJNU/ Code of Conduct: http://python.org/psf/codeofconduct/