Repository navigation
locally imported modules are unaccessible in lambdas in pdb #76987
Description
Activity
YuriKanivetsky commented
on Feb 9, 2018 YuriKanivetskymannequinMannequinAuthorMore actionsConsider the following script:
# import pdb; pdb.set_trace() # import re def f(): import re print((lambda: re.findall('a', 'aaa'))()) import pdb; pdb.set_trace() print('test') f()
When you run it and try to evaluate
(lambda: re.findall('a', 'aaa'))(), you get:['a', 'a', 'a'] > /home/yuri/_/1.py(7)f() -> print('test') (Pdb) (lambda: re.findall('a', 'aaa'))() *** NameError: name 're' is not defined (Pdb) import re (Pdb) (lambda: re.findall('a', 'aaa'))() *** NameError: name 're' is not defined (Pdb)With the commented out breakpoint it works:
> /home/yuri/_/a.py(3)<module>() -> def f(): (Pdb) import re (Pdb) (lambda: re.findall('a', 'aaa'))() ['a', 'a', 'a'] (Pdb)Also it works with uncommented global import and second breakpoint:
['a', 'a', 'a'] > /srv/http/sl/makosh/a.py(7)f() -> print('test') (Pdb) (lambda: re.findall('a', 'aaa'))() ['a', 'a', 'a'] (Pdb)From what I can see the issue occurs when there's no
reinglobalsargument here: https://github.com/python/cpython/blob/v3.6.4/Lib/pdb.py#L376I've run into it when trying to grep some object's attribute names, like:
!list(filter(lambda x: re.search('class', x), dir(__name__)))- addedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Feb 9, 2018 This can be traced back to the following issue:
>>> c = compile("(lambda: re.findall('a', 'aaa'))()", "<stdin>", "single") >>> import re as rea >>> exec(c, None, {'re': rea}) NameError: name 're' is not defined.
Seeing disassembly of the compiled code, it used LOAD_GLOBAL to get re. This seems to be the problem.
Sorry. I didn't finish my last message. Is the behaviour described in that message a bug? If yes, that would explain the original behaviour. If no, why not?
- addedstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directory
on Nov 23, 2023 Fixed by #111094
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: