異なるを区別する必要があります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()
しtest()
ます。したがって、' is not defined. while
foobarfoo`が定義されます。
foobar2
2つの変数とをエクスポートし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
あなたはすでに解決策を見つけました。ただし、動作は少し異なります。