次のコードがあります。
for serv in allservices:
services[serv['id']] = serv
hosts[serv['host']]['services'][serv['id']] = serv
allservicesは辞書のリストで、servicesは辞書です。このコードは関数内にあり、2 回呼び出されます。初めてうまくいきます。ただし、2回目には、次のようになります。
ファイル "/media/sf_virtual_shared_folder/workfolder/omeganoc-sprint/onoc/omeganoc/grapher.py"、338 行目、allservices のサービスの get_logical_dependencies_components: KeyError: 9
これで、存在しない辞書の要素を入力しようとすると、キーエラーが発生することがわかりました。しかし、ここで辞書のいくつかの値を初期化または編集しようとしましたが、最初は正常に機能し、2 回目は機能しません。
この問題の原因と対処方法を教えてください。
編集: 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:
OK、デバッガーを使用して、エラーが実際にはループの最後の行にあることがわかりました。
hosts[serv['host']]['services'][serv['id']] = serv
そして、それはホストに要素hosts[serv['host']]がないためです。これは実際には hosts[9]であり、したがってキーエラー: 9.
ただし、この要素がなくても、ここで初期化する必要があるため、なぜ機能しないのかまだわかりませんか?