如果列表理解中的子句在pdb中给出了未定义名称的错误,但在解释器中没有。

问题描述 投票:-2回答:1

对不起,标题很糟糕。我必须弄清楚术语,并试图把所有相关的观点放在那里。

考虑以下Python中的简单交互。

Python 3.6.9 (default, Jul 21 2019, 14:33:59) 
[GCC 7.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> python.el: native completion setup loaded
>>> s1 = [ i for i in range(10)]
>>> [i for i in range(len(s1)) if s1[i]%2 == 0]
[0, 2, 4, 6, 8]

最后一条语句创建 (并打印) 原始数组 s1 中偶数元素的索引。

但在pdb中,等价的东西却不能用。

(Pdb) !s1 = [ i for i in range(10)]
(Pdb) s1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(Pdb) ![i for i in range(len(s1)) if s1[i]%2 == 0]
*** NameError: name 's1' is not defined

为什么在python解释器中s1在作用域中,而在调试器中却没有?我想在数组中找出符合某些条件的元素。在debugger中,python的方法是什么?

python-3.x pdb
1个回答
2
投票

就像其他人提到的那样,你的代码应该可以工作。然而,我前段时间在尝试像你一样在列表理解中使用变量时遇到了类似的问题,我发现Antimony在这里的回应非常有用。

"在Python 3中,你必须在pdb中使用交互命令 才能访问任何非全局变量,这是因为理解的实现方式发生了变化。"

来自Python调试器的列表理解范围错误

© www.soinside.com 2019 - 2024. All rights reserved.