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/

Reply via email to