Hi,
It turns out that implementing the save and restore semantics in the
example I gave is not that difficult.
I was motivated to find out by the DLS 2020 paper on pattern matching.
It claims that introducing small scopes for variables would have to be
implemented as a function preventing the use of normal control flow.
Since restoring the variable after an except block is a similar problem,
I thought I'd see how difficult it was.
If anyone's interested, here's a prototype:
https://github.com/python/cpython/compare/master...markshannon:fix-exception-scoping
(This only saves globals and function-locals, class-locals and
non-locals are unchanged. I'd probably want to emit a syntax warning for
non-locals, as the semantics are a bit weird).
Cheers,
Mark.
On 17/11/2020 9:55 am, Mark Shannon wrote:
Hi,
I'm wondering why
```
x = "value"
try:
1/0
except Exception as x:
pass
```
does not restore "value" to x after
the `except` block.
There doesn't seem to be an explanation for this behavior in the docs or
PEPs, that I can find.
Nor does there seem to be any good technical reason for doing it this way.
Anyone know why, or is just one of those unintended consequences like
`True == 1`?
Here's an example of restoring the value of the variable after the
`except` block:
>>> def f(x):
... try:
... 1/0
... except Exception as x:
... pass
... return x
...
>>> f("hi")
'hi'
Cheers,
Mark.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/python-dev@python.org/message/KGYRLITEPB22ZZO4N7DD4A7QP7FQS6JO/
Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/python-dev@python.org/message/IAY4XHLOOA572INPMP34WYXZPOSORBYU/
Code of Conduct: http://python.org/psf/codeofconduct/