我有以下代码:
for serv in allservices:
services[serv['id']] = serv
hosts[serv['host']]['services'][serv['id']] = serv
其中allservices是字典列表,services是字典。这段代码在一个函数中,它被调用了两次。第一次它工作正常。然而,在第二次,我得到了这个:
文件“/media/sf_virtual_shared_folder/workfolder/omeganoc-sprint/onoc/omeganoc/grapher.py”,第 338 行,在 get_logical_dependencies_components 中用于所有服务中的 serv:KeyError:9
现在,我知道当我们尝试输入不存在的字典元素时会出现关键错误。但是,在这里我尝试初始化或编辑字典的一些值,第一次它工作正常,第二次它没有。
什么可能导致此问题,我该如何处理?
编辑:allservices和services 的定义:
allservices = [{'id':s.id,
'name':s.get_name(),
'host': s.host.id,
'required_services': {},
'dependent_services': {}}
for s in shinken.get_all_service()]
...
services = {}
编辑2:
好的,使用调试器,我发现错误实际上是在循环的最后一行,在:
hosts[serv['host']]['services'][serv['id']] = serv
而且,这是因为在主机中我没有元素hosts[serv['host']],实际上是hosts[9],因此关键错误:9。
但是,即使我没有这个元素 - 它应该在这里初始化,所以我仍然不明白为什么它不起作用?