如何用Python为YAML文件添加新键值对并解决KeyError问题?
解决YAML添加nodeSelector时的KeyError问题
这个错误的原因很直接:你的原始YAML文件里,spec节点下根本没有nodeSelector这个键,Python尝试访问pod['spec']['nodeSelector']时找不到对应的字典,自然就抛出了KeyError。
要解决这个问题,你需要先确保spec下存在nodeSelector字典,再往里面添加键值对,这里有两种简洁的实现方式:
方法1:显式检查并创建字典
这种方式逻辑清晰,适合需要明确控制流程的场景:
pod = mylib.load_yaml("net/pod.yaml") # 检查spec中是否存在nodeSelector,不存在则初始化空字典 if 'nodeSelector' not in pod['spec']: pod['spec']['nodeSelector'] = {} # 现在可以安全地添加键值对了 pod['spec']['nodeSelector']['key'] = 'val' # 别忘了把修改后的内容保存回YAML文件 mylib.save_yaml("net/pod.yaml", pod)
方法2:使用dict.setdefault()简化代码
setdefault()方法会自动检查键是否存在:如果存在就返回对应的值,如果不存在就创建一个指定默认值的键并返回,一行代码就能搞定:
pod = mylib.load_yaml("net/pod.yaml") # 自动创建nodeSelector(如果不存在)并添加键值对 pod['spec'].setdefault('nodeSelector', {})['key'] = 'val' # 保存修改 mylib.save_yaml("net/pod.yaml", pod)
修改完成后,你的YAML文件会变成这样:
spec: containers: - image: ceridwen/networking:v1 imagePullPolicy: Always name: networking readinessProbe: tcpSocket: port: 5000 initialDelaySeconds: 5 periodSeconds: 1 restartPolicy: Always nodeSelector: key: val
内容的提问来源于stack exchange,提问作者Invictus
相关产品推荐
相关产品推荐

