Python 调试器 (pdb):它如何访问变量?

Python debugger (pdb): how does it access variables?

我在测试一段对列表和 returns 排序索引进行排序的代码时,遇到了一个不寻常的 bug/feature pdb。

mylist = [280, 275]
sorted_inds = sorted(range(len(mylist)), key=lambda i: mylist[i])

这在常规 python 中工作正常,返回 [1, 0]

但是当我在 pdb 中尝试时,我得到 NameError:

*** NameError: name 'mylist' is not defined

这似乎是因为 lambda 函数无法 see/doesn 访问先前定义的列表 mylist

我想进一步了解为什么会这样。为什么它在正常 Python 中有效,但在调试器中却无效?在调试器中处理变量的方式有何不同?

经过一番挖掘后,我发现 this bug report from this answer 是 2014 年的。最初,我们决定不修复此问题,但随后开发了一个补丁来修复它。看来这个补丁还没有实现。

错误报告中有建议的解决方法。