【发布时间】:2014-06-10 19:15:48
【问题描述】:
在调试我的代码时,我想使用列表推导。但是,当我在函数内部时,似乎无法从调试器评估列表理解。
我正在使用 Python 3.4。
脚本内容:
$ cat test.py
#!/usr/bin/python
def foo():
x = [1, 2, 3, 3, 4]
print(x)
foo()
交互式调试:
$ python3 -mpdb test.py
> /tmp/test.py(3)<module>()
-> def foo():
(Pdb) step
> /tmp/test.py(8)<module>()
-> foo()
(Pdb)
--Call--
> /tmp/test.py(3)foo()
-> def foo():
(Pdb)
> /tmp/test.py(4)foo()
-> x = [1, 2, 3, 3, 4]
(Pdb)
> /tmp/test.py(6)foo()
-> print(x)
(Pdb) p [x for _ in range(1)]
*** NameError: name 'x' is not defined
(Pdb) p x
[1, 2, 3, 3, 4]
为什么列表理解不知道x?我如何从调试器评估列表理解,或实现等效的行为?这是一个错误,还是对调试器的某种基本限制?
【问题讨论】:
-
更简单的例子:
p (lambda: x)() -
lambda 指针给了我一个想法,我发现this question 的答案在这里同样适用。
-
啊,
code.interact(locals=vars())和我的evalhack 完全一样。 -
哦,
pdb甚至还有一个interact命令,很酷。
标签: python debugging python-3.x list-comprehension