python调试器中的所有变量都是未定义的

我在Python 3.6上面临一个非常奇怪的问题.在我的代码中间,我调用import pdb; pdb.set_trace()来调试一些代码.

然后我无法正常调试,例如:

(Pdb) abc = 3
(Pdb) [abc for _ in range(2)]
*** NameError: name 'abc' is not defined
(Pdb) [abc, abc]
[3, 3]

似乎每当我使用列表推导时,都存在未定义变量的问题.但是,如果我在打开Python后立即调用调试器,我没有观察到这种行为,一切运行正常.

我有这个问题的任何想法?

解决方法:

发生这种情况是因为列表推导(主要)在嵌套范围内进行评估,而在pdb中创建的嵌套范围无法访问被检查范围的局部变量.但是,它们可以访问全局变量,并且在打开Python后立即启动pdb时,您将在全局范围内运行它,因此您创建的abc是全局的.

这也发生在exec和类语句中的列表推导中.不幸的是,没有比“不使用列表推导”更好的解决方法.

上一篇:python pdb调试


下一篇:Python学习教程:关于PyCharm比较高效率的使用技巧