global declaration in except has incorrect prior use · Issue #111123 · python/cpython (original) (raw)
Bug report
Bug description:
I think the global a
has no prior use in this code (and pyright tells me the same). But I don't understand why cpython thinks it has a prior use.
a=5
def f(): try: pass except: global a else: print(a)
output (Python 3.12.0):
File "/home/frank/projects/pysource-playground/pysource-codegen/bug.py", line 8 global a ^^^^^^^^ SyntaxError: name 'a' is used prior to global declaration
the following code has no syntax error:
a=5
def f(): try: pass except: global a print(a)
I can also reproduce this issue in 3.7.
I also don't know what the exact semantic of global/nonlocal inside statements like if/while/try/... is. I would like to know more about it because I'm currently writing pysource-codegen where I generate such cases.
CPython versions tested on:
3.12
Operating systems tested on:
Linux