- Python Home
- About
- News
- Documentation
- Downloads
- Community
- Foundation
- Developer's Guide
- Issue Tracker
- Issues
- Summaries
- User
- Administration
- Help
Issue35871
This issue tracker has been migrated to GitHub,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2019-02-01 00:25 by jayanth, last changed 2022-04-11 14:59 by admin.
| Messages (3) | |||
|---|---|---|---|
| msg334639 - (view) | Author: Jayanth Raman (jayanth) | Date: 2019-02-01 00:25 | |
I get a NameError for a variable in the generator param of a function or in a list comprehension. See example below. The variable is available to the program, but not to the interactive Pdb shell.
# Test file:
def main(nn=10):
xx = list(range(nn))
breakpoint()
for ii in range(nn):
num = sum(xx[jj] for jj in range(nn))
print(f'xx={xx}')
if __name__ == '__main__':
main()
$ python3
Python 3.7.2 (default, Jan 13 2019, 12:50:15)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3 /tmp/test.py
> /tmp/test.py(5)main()
-> for ii in range(nn):
(Pdb) n
> /tmp/test.py(6)main()
-> num = sum(xx[jj] for jj in range(nn))
(Pdb) sum(xx[jj] for jj in range(nn))
*** NameError: name 'xx' is not defined
(Pdb) [xx[jj] for jj in range(nn)]
*** NameError: name 'xx' is not defined
(Pdb) c
xx=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
FWIW python3 is a homebrew installation. I had the same issue with 3.7.0 as well (also homebrew):
Python 3.7.0 (default, Sep 18 2018, 18:47:22)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
|
|||
| msg334646 - (view) | Author: Karthikeyan Singaravelan (xtreak) * ![]() |
Date: 2019-02-01 04:02 | |
Thanks for the report. This seems related to issue21161 and issue26072 that contain explanation about scope where exec is called with the code and patches that fix this issue. As a possible workaround in the issues you can use "interact" command to get to a REPL where you can evaluate and exit back to pdb. |
|||
| msg334647 - (view) | Author: Jayanth Raman (jayanth) | Date: 2019-02-01 05:21 | |
Thanks for the "interact" tip.
FWIW, I see this issue in 2.7.10 as well. Although the list comprehension works.
$ python
Python 2.7.10 (default, Oct 6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D
$ python /tmp/test2.py
> /tmp/test2.py(5)main()
-> for ii in range(nn):
(Pdb) n
> /tmp/test2.py(6)main()
-> num = sum(xx[jj] for jj in range(nn))
(Pdb) sum(xx[jj] for jj in range(nn))
*** NameError: global name 'xx' is not defined
(Pdb) [xx[jj] for jj in range(nn)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(Pdb) c
('xx', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# test2.py
def main(nn=10):
xx = list(range(nn))
import pdb; pdb.set_trace()
for ii in range(nn):
num = sum(xx[jj] for jj in range(nn))
print('xx', xx)
if __name__ == '__main__':
main()
|
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:10 | admin | set | github: 80052 |
| 2019-02-01 05:21:32 | jayanth | set | messages: + msg334647 |
| 2019-02-01 04:02:57 | xtreak | set | nosy:
+ xdegaye, xtreak messages: + msg334646 |
| 2019-02-01 00:25:49 | jayanth | create | |


