问题描述
在Python 3中,interact
由于实现理解的方式发生了变化,因此必须先在pdb中使用命令才能访问任何非全局变量。
>>> def foo(): [][0]
...
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in foo
IndexError: list index out of range
>>> import pdb;pdb.pm()
> <stdin>(1)foo()
(Pdb) x = 4
(Pdb) [x for _ in range(2)]
*** NameError: name 'x' is not defined
(Pdb) interact
*interactive*
>>> [x for _ in range(2)]
[4, 4]
>>>
解决方法
在调试代码时,我想使用列表推导。但是,当我在函数内部时,似乎无法从调试器评估列表理解。
我正在使用Python 3.4。
脚本内容 :
$ cat test.py
#!/usr/bin/python
def foo():
x = [1,2,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,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,4]
为什么x
列表理解未知?如何评估调试器的列表理解能力,或实现等效的行为?这是一个错误,还是对调试器的某种基本限制?