python-3.x - 列表推导中的 if 子句在 pdb 中给出未定义的名称错误,但在解释器中没有

标签 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 方法是什么?

最佳答案

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

“在 Python 3 中,由于理解实现方式的改变,您必须在 pdb 中使用交互命令才能访问任何非全局变量。”

List comprehension scope error from Python debugger

关于python-3.x - 列表推导中的 if 子句在 pdb 中给出未定义的名称错误,但在解释器中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470231/

相关文章:

python - 是否可以跳过 pdb/ipdb 中的断点?

python - Tkinter 框架展开仅显示我的一半窗口

python - 有没有办法干净地杀死 uvicorn?

python - gud-pdb emacs 用法和路径

python - 我如何逐步使用 python 调试器在每次函数调用时中断?

python - pdb的post_mortem方法怎么用?

python - 将 STR_TO_DATE() 与占位符一起使用时出错

python - 如何从深度差异中完全排除 "type_changes",因为我只关心值的变化?

python-3.x - 将数组行 append 到 Python 3 中的 .txt 文件

python - 了解 pdb.set_trace() 之后的 pdb 输出