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 年的。最初,我们决定不修复此问题,但随后开发了一个补丁来修复它。看来这个补丁还没有实现。
错误报告中有建议的解决方法。
我在测试一段对列表和 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 年的。最初,我们决定不修复此问题,但随后开发了一个补丁来修复它。看来这个补丁还没有实现。
错误报告中有建议的解决方法。