
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... (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-leave@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/KGYRLITE...
Code of Conduct: http://python.org/psf/codeofconduct/