【发布时间】:2020-08-19 20:23:39
【问题描述】:
我正在尝试使用 Python 的调试模块 pdb 查看列表解析调用的结果。然而,pdb“环境”同时声称一个变量已定义和未定义,导致 pdb 同意定义的变量的NameError。以下是复制问题的最小代码示例:
import pdb
def main():
bar = [0, 0, 1, 1]
foo(bar)
def foo(bar):
pdb.set_trace()
### pdb COMMANDS LISTED BELOW ARE CALLED HERE ###
print([False if bar[i] == 0 else True for i in range(len(bar))])
main()
在上述代码执行点运行以下 pdb 命令会导致以下结果。
(Pdb) p bar
[0, 0, 1, 1]
(Pdb) p [False if bar[i] == 0 else True for i in range(len(bar))]
*** NameError: name 'bar' is not defined
(Pdb) !print([False if bar[i] == 0 else True for i in range(len(bar))])
*** NameError: name 'bar' is not defined
(Pdb) n
[False, False, True, True]
此外,在没有 pdb 模块的情况下运行代码会产生预期的结果。将pdb.set_trace() 方法调用的位置更改为main 函数对结果没有影响。为了调试这个列表理解调用,我需要做什么?
【问题讨论】:
-
这里的目标是深入了解 pdb 还是能够在列表理解中进行调试?
-
目标是能够在列表理解中进行调试。
-
使用 debugpy 或 pdb 的 VSCode 将为您处理这些情况。我怀疑您在这里遇到了关闭问题——目前大多数 IDE 都会解决这个问题。这对您来说是一个可行的解决方案吗?