On Mon, Jan 03, 2022 at 11:31:30PM -0500, elvis kahoro wrote:
> 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")
Can you explain why you want to do that?
Right now, to do something like that you would need something like this:
err1 = err2 = None
try:
x = this_raises_an_exception
except AttributeError as e:
err1 = e
try:
y = this_raises_another_exception
except (AttributeError, TypeError) as e:
err2 = e
if err1 is err2 is None:
# handle the case where neither expression raised
print(x, y)
elif err1 is None or err2 is None:
# only one expression raised
print("everything else")
elif isinstance(err1, AttributeError):
if isinstance(err2, AttributeError):
print("two Attribute Errors")
elif isinstance(err2, TypeError):
print("Attribute Error and Type Error")
else:
print("everything else")
else:
print("everything else")
or something equally convoluted. I agree that if you are currently
writing code this horrible, the idea of using a match statement would
seem attractive.
But... are you actually writing this sort of horrible, convoluted,
complex, complicated mess of code? Why??? Please explain your actual
concrete use-case for this. Otherwise it looks to me like an
over-generalisation.
I think I would need to see a sketch of *real* code to understand why
you want this.
As I see it, there are three realistic use-cases, all which can be
handled with existing syntax:
* protect the match expression in a try...except:
try: x = expression
except SomeError: ...
match x: ...
* protect a case block in a try...except:
match expression:
case something:
try:
block
except SomeError: ...
* protect the whole construct in a try...except:
try:
match expression:
case something:
block
except:
log(something)
raise
Anything else seems to me to be YAGNI; too complex and complicated to
care about.
Convince me that I'm wrong.
--
Steve
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/RNMCIYU6ZGEWQWGAQ4B3QRN225O3MS6W/
Code of Conduct: http://python.org/psf/codeofconduct/