New submission from Yuri Kanivetsky <yuri.kanivet...@gmail.com>: Consider 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 `re` in `globals` >argument here: https://github.com/python/cpython/blob/v3.6.4/Lib/pdb.py#L376 I've run into it when trying to grep some object's attribute names, like: !list(filter(lambda x: re.search('class', x), dir(__name__))) ---------- messages: 311871 nosy: Yuri Kanivetsky priority: normal severity: normal status: open title: locally imported modules are unaccessible in lambdas in pdb type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32806> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com