我正在尝试调试一些使用内置任何函数的代码,但我看不出我做错了什么。我能够使用 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]):