【发布时间】:2013-06-05 15:01:15
【问题描述】:
我有以下代码:
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 在所有服务中服务: 关键错误: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 我没有元素 hosts[serv['host']] ,实际上是 hosts[9],因此关键错误:9。
但是,即使我没有这个元素——它应该在这里初始化,所以我还是不明白为什么它不起作用?
【问题讨论】:
-
你能把剩下的代码贴出来吗?
-
什么是服务类变量?是
dict还是别的什么? -
循环中的
print serv给出了什么? -
打印服务给出:{'host': 4, 'required_services': {}, 'id': 40, 'dependent_services': {}, 'name': u'HTTP-www.maison -etanche.com'},因为列表的每个元素都是字典。
-
根据错误消息,在
for serv in allservices行中引发了异常 - 如果allservices不是一个列表,而是一个类似列表的对象,这将是令人惊讶的,但也有可能。
标签: python python-2.7 dictionary flask