对不起,可怕的标题。我必须弄清楚术语并尝试将所有相关要点放在那里。
考虑以下 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 方法是什么?
最佳答案
就像其他人提到的那样,您的代码应该可以工作。但是,前段时间我遇到了类似的问题,当我尝试在像您一样的列表理解中使用变量时,我发现这里的 Antimony 响应非常有用:
“在 Python 3 中,由于理解实现方式的改变,您必须在 pdb 中使用交互命令才能访问任何非全局变量。”
List comprehension scope error from Python debugger
关于python-3.x - 列表推导中的 if 子句在 pdb 中给出未定义的名称错误,但在解释器中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470231/