[New-bugs-announce] [issue32806] locally imported modules are unaccessible in lambdas in pdb

Yuri Kanivetsky report at bugs.python.org
Fri Feb 9 04:47:46 EST 2018


New submission from Yuri Kanivetsky <yuri.kanivetsky at 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 <report at bugs.python.org>
<https://bugs.python.org/issue32806>
_______________________________________


More information about the New-bugs-announce mailing list