У меня есть следующий код:Python KeyError исключение для инициализации словаря
for serv in allservices:
services[serv['id']] = serv
hosts[serv['host']]['services'][serv['id']] = serv
где allservices является список словарей и услуги является словарь. Этот код находится в функции, которая вызывается дважды. В первый раз он отлично работает. Во второй раз, однако, я получаю это:
File "/media/sf_virtual_shared_folder/workfolder/omeganoc-sprint/onoc/omeganoc/grapher.py", line 338, in get_logical_dependencies_components for serv in allservices: KeyError: 9
Теперь я знаю, что ключ ошибка получается, когда мы пытаемся ввести элемент словаря, который не существует. Но здесь я пытаюсь инициализировать или редактировать некоторые значения словаря, и в первый раз он отлично работает, а второй - нет.
Что может быть причиной этой проблемы и как с ней бороться?
EDIT: Определение allservices и услуг:
allservices = [{'id':s.id,
'name':s.get_name(),
'host': s.host.id,
'required_services': {},
'dependent_services': {}}
for s in shinken.get_all_service()]
...
services = {}
EDIT 2:
ОК, с отладчиком, я узнал, что ошибка на самом деле находится в последней строке цикла, i п:
hosts[serv['host']]['services'][serv['id']] = serv
И это потому, что в хозяев у меня нет элемента хозяев [серв [ 'Host']], что на самом деле хозяева [9 ], и, следовательно, ключевая ошибка: 9.
Однако, даже если у меня нет этого элемента - он должен быть инициализирован здесь, поэтому я до сих пор не понимаю, почему это не работает?
можете ли вы оставить остальную часть своего кода? – dm03514
Каков класс переменных сервисов? Это 'dict' или что-то еще? – ElmoVanKielmo
Что дает 'print serv' в цикле? – RedBaron