You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历嵌套字典读取Password键触发KeyError问题咨询

错误原因分析
  • 访问stuff["Password"]抛出KeyError:你实际使用的COMMANDS字典中存在部分命令条目没有定义Password字段,或字段名拼写有误(大小写、前后空格等),你提供的最小复现示例中两个命令都有该字段,运行注释的打印语句不会触发错误。
  • 你尝试写的print(DEFAULTS["PASSWRD"][DEFAULTS["COMMANDS"][{stuff}]["Password"]])报错:{stuff}会把当前迭代的命令属性字典转为集合类型,而COMMANDS的键是字符串类型的命令名,用集合作为键无法匹配到任何条目,触发KeyError。
  • 你最小复现示例中最后一行的DEFAULTS["COMMANDS"]["QD"]["Password"]报错:你的COMMANDS字典里不存在名为QD的命令键,自然无法查询到对应条目。
正确实现方案

遍历过程中已经拿到了当前命令的属性字典stuff,直接用里面的Password值查询PASSWRD即可,无需重复查询COMMANDS:

DEFAULTS = {
        "PASSWRD" : {
        0 : "None",
        1: "Requires standard password",
        2: "Requires factory password",
                },
        "COMMANDS" : {
        "ZS" : {
                "Type" : "SETUP",
                "Max Parameters Required" : 1,
                "Parameters" : "[,n]",
                "Definition" : "Set/Get Seeder delay",
                "Password": 0 
                },
        "ZV" : {
                "Type" : "SETUP",
                "Max Parameters Required" : 1,
                "Parameters" : "[,n]",
                "Definition" : "Set/Get Variable Sync delay",
                "Password": 0 
                },
                }                 
        }


for command, stuff in DEFAULTS["COMMANDS"].items():
    print(f"\nCommand: {command}")
    print(stuff["Definition"])
    # 直接匹配密码提示
    pwd_level = stuff["Password"]
    print(DEFAULTS["PASSWRD"][pwd_level])

如果要兼容没有Password字段的异常命令,可以加兜底逻辑避免报错:

for command, stuff in DEFAULTS["COMMANDS"].items():
    print(f"\nCommand: {command}")
    print(stuff["Definition"])
    pwd_level = stuff.get("Password", -1)
    print(DEFAULTS["PASSWRD"].get(pwd_level, "Undefined password requirement"))

内容的提问来源于stack exchange,提问作者Strelok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:06:04