你需要区分不同的globals()
.
例如,假设我们有一个模块:mymodule.py
foo = 100
def test():
bar = 200
return bar
我们在 的控制下运行它pdb
。
>>> import pdb
>>> import mymodule
>>> foobar = 300
>>> pdb.run('mymodule.test()')
> <string>(1)<module>()
(Pdb) print foobar
300
(Pdb) print foo
*** NameError: name 'foo' is not defined
(Pdb) global foobar2; foobar2 = 301
(Pdb) print foobar2
301
一开始,也就是执行之前test()
,pdb中的环境就是你当前的globals()
. 因此foobar
已定义,而foo
未定义。
然后我们执行test()
并在结束时停止bar = 200
-> bar = 200
(Pdb) print bar
200
(Pdb) print foo
100
(Pdb) print foobar
*** NameError: name 'foobar' is not defined
(Pdb) global foo2; foo2 = 101
(Pdb) print foo2
101
(Pdb) c
>>>
pdb 中的环境已更改。它使用mymodule
's globals()
in test()
。因此定义了'foobar foo' is not defined. while
。
我们导出了两个变量foobar2
和foo2
. 但他们生活在不同的范围内。
>>> foobar2
301
>>> mymodule.foobar2
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
mymodule.foobar2
AttributeError: 'module' object has no attribute 'foobar2'
>>> mymodule.foo2
101
>>> foo2
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
foo2
NameError: name 'foo2' is not defined
您已经找到了解决方案。但它的工作方式略有不同。