<p>这是个奇怪的问题。在中调试类函数的命名空间时遇到了它py.测试在pdb中。pdb之外没有错误。在</p>
<pre><code>(Pdb) lines=["oneline",2,3,4,5]
(Pdb) ip_dict = dict( ( lines[i], lines[i+1] ) for i in range(0,len(lines),2) )
*** NameError: global name 'lines' is not defined
(Pdb) for i in range(0,len(lines),2): print "%d=%s" % (i,lines[i])
0=oneline
2=3
4=5
(Pdb) self
<Docker-sanity_regression.SANITY testMethod=test_SANITY_002_####_container>
</code></pre>
<p>为了简化问题,这里有一个例子。在</p>
^{pr2}$
<p>这对于Python2.4很好。和Python2.7。
在类func中嵌入dict集:</p>
<pre><code>class Test:
def __init__(self):
print "init"
self.ip_dict = {}
def setDict(self):
lines=["oneline",2,3,4,5]
self.ip_dict = dict( ( lines[i], lines[i+1] ) for i in range(0,len(lines),2) )
print self.ip_dict
foo = Test()
foo.setDict()
</code></pre>
<p>这对于python2.4也很适用。和Python2.7。在</p>
<p>因此,我认为在某些版本的python和pdb中存在一个有趣的名称空间问题,用于这种理解。
编辑:是的。pdb的已知问题。感谢<a href="https://stackoverflow.com/users/396967/kynan">https://stackoverflow.com/users/396967/kynan</a>的解释。<a href="https://bugs.python.org/issue21161" rel="nofollow noreferrer">https://bugs.python.org/issue21161</a>Title:列表理解在python3中看不到pdb中的局部变量</p>