Python &引用;名称错误:未定义全局名称";在PDB认为已定义时引发

Python &引用;名称错误:未定义全局名称";在PDB认为已定义时引发,python,python-2.7,pdb,Python,Python 2.7,Pdb,我试图调试一些使用内置函数的代码,但我不知道我做错了什么。我可以使用PDB访问变量,但一旦我在生成器中使用它来访问任意函数,它似乎突然被认为是未定义的。我做错了什么 -> 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

我试图调试一些使用内置函数的代码,但我不知道我做错了什么。我可以使用PDB访问变量,但一旦我在生成器中使用它来访问任意函数,它似乎突然被认为是未定义的。我做错了什么

-> 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
->src=self['src']
(Pdb)n
->如果有(键入self.keys时未键入src):
(Pdb)p src
{'type':'local','location':'/tmp/tmpy5F3Rz/secrets'}
(Pdb)p型(src)
(Pdb)p自动钥匙
['location','type']
(Pdb)[钥匙不在src中,用于钥匙在自钥匙中]
[假,假]
(Pdb)n
***NameError:未定义全局名称“src”

这似乎就是问题所在:

执行时

如果有(key not in src for key in self.keys):
“key not in src for key in self.keys”参数将作为生成器传递给任何函数

原因:-

1) 生成器有自己的作用域,即内(key not in src for key in self.keys)

2) 发电机是惰性执行的,请参考:-

可能的解决方案:-

将该语句替换为


如果有([key not in src for key in self.keys]):

你能发布你的全部代码吗?我不能发布比StackOverflow上更多的内容。这确实有效,但我不知道为什么会有区别:如果有([key not in src for key in self.keys])):如果您不愿意发布更多代码,那么很难猜测实际发生了什么。也许你可以试着把它提炼成一种酒?