列表解析中的if子句在pdb中给出了未定义的名称错误,但在解释器中未给出

时间:2020-04-27 23:33:13

标签: python-3.x pdb

对不起,标题不好。我不得不弄清楚术语,并试图将所有相关的观点放在那里。

考虑以下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

为什么s1在python解释器中而不是在调试器中?我试图识别满足某些条件的数组中的元素。在调试器中执行此操作的python方法是什么?

1 个答案:

答案 0 :(得分:2)

就像其他人提到的那样,您的代码应该可以工作。但是,前段时间,当我尝试在像您这样的列表理解中使用变量时遇到了一个类似的问题,我发现这里锑的响应非常有用:

“在Python 3中,由于实现理解的方式发生了变化,在访问任何非全局变量之前,必须先在pdb中使用interact命令。”

List comprehension scope error from Python debugger