Closed
Description
Bug report
Checklist
- I am confident this is a bug in CPython, not a bug in a third-party project
- I have searched the CPython issue tracker,
and am confident this bug has not been reported before
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.13.0a0 (heads/main:dd32611f4f, Aug 31 2023, 20:23:23) [GCC 10.2.1 20210110]
A clear and concise description of the bug:
The following assertion fails with PEP 709 (c3b595e):
import sys
f_locs = None
[f_locs := sys._getframe().f_locals for a in range(1)]
assert 'a' in f_locs
This was discovered when trying to inspect listcomp iteration variable under pdb
, as it makes inspection of these variables impossible:
> /home/radislav/projects/cpython/listcomp.py(1)<module>()
-> [print(a) for a in range(1)]
(Pdb) s
0
> /home/radislav/projects/cpython/listcomp.py(1)<module>()
-> [print(a) for a in range(1)]
(Pdb) print(a)
*** NameError: name 'a' is not defined
(Pdb) s
/home/radislav/projects/cpython/listcomp.py:1: RuntimeWarning: assigning None to unbound local 'a'
[print(a) for a in range(1)]
--Return--
> /home/radislav/projects/cpython/listcomp.py(1)<module>()->None
-> [print(a) for a in range(1)]
As I can see, it happens because iteration vars are now stored in "fast hidden locals" that aren't included into frame->f_locals
on _PyFrame_FastToLocalsWithError(frame)
call, and thus are not accessible through PyFrameObject
f_locals
attribute.
cc @carljm