[issue32806] locally imported modules are unaccessible in lambdas in pdb

2018-02-11 Thread Nitish

Nitish  added the comment:

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?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue32806] locally imported modules are unaccessible in lambdas in pdb

2018-02-11 Thread Nitish

Nitish  added the comment:

This can be traced back to the following issue:

>>> c = compile("(lambda: re.findall('a', 'aaa'))()", "", "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.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue32806] locally imported modules are unaccessible in lambdas in pdb

2018-02-10 Thread Nitish

Change by Nitish :


--
nosy: +nitishch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue32806] locally imported modules are unaccessible in lambdas in pdb

2018-02-09 Thread Yuri Kanivetsky

New submission from Yuri Kanivetsky :

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)()
-> 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 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com