"NameError: global name is not defined" 在 PDB 认为它已定义时抛出



我正在尝试调试一些使用内置任何函数的代码,但我看不出我做错了什么。我能够使用 PDB 访问变量,但是一旦我在生成器中使用它来获取 any 函数,它似乎突然被认为是未定义的。我做错了什么?

-> src = self['src']
(Pdb) n
-> if any(key not in src for key in self.keys):
(Pdb) p src
{'type': 'local', 'location': '/tmp/tmpy5F3Rz/secrets'}
(Pdb) p type(src)
<type 'dict'>
(Pdb) p self.keys
['location', 'type']
(Pdb) [key not in src for key in self.keys]
[False, False]
(Pdb) n
*** NameError: global name 'src' is not defined

这似乎是问题所在:

https://mail.python.org/pipermail/python-list/2009-January/522224.html

执行时

if any(key not in src for key in self.keys):"密钥不在 src 中,用于 self.keys 中的密钥"参数将作为生成器传递给任何函数。

原因:-

1)生成器有自己的范围,即。内(键不在 src 中,因为键在 self.keys 中)

2) 生成器被延迟执行 参考:- http://naiquevin.github.io/python-generators-and-being-lazy.html

可能的解决方案:-

将该语句替换为

if any([key not in src for key in self.keys]):

最新更新