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

Python中将字典数据赋值给类和对象时出现KeyError问题如何解决

报错诱因
  • 字典结构理解错误:你生成的data2是两层嵌套结构,第一层的键是Austin、keller这类用户名,第二层才是姓名、联系方式等属性字段。你直接用values[2](也就是姓名值)作为第一层键去查data2,自然找不到对应键,触发KeyError。
  • 类使用逻辑错误:你直接给member2类本身的属性赋值,没有创建类的实例,后续如果存储多个用户数据会直接覆盖,不符合业务逻辑。
  • 代码执行顺序错误:赋值操作写在了data2的生成逻辑之前,即使键写对也会出现变量未定义或取值错误的问题。
  • 隐式变量未定义:代码中用到的keys变量没有提前定义,生成属性字典时会出现键值不匹配的问题。
修复方案

第一步:提前定义字段映射关系

先明确文本字段和类初始化参数的对应关系,避免后续取值混乱:

# 文本拆分后对应的字段名,和values的位置一一对应
text_keys = ["placeholder", "Full Name", "Contact Details", "Emergency Contact Number", "Country"]
# 字段名和类初始化参数的映射
field_map = {
    "Full Name": "realname",
    "Contact Details": "phone",
    "Emergency Contact Number": "emergencyContact",
    "Country": "country"
}

第二步:调整读取和实例化逻辑

按正确顺序读取文件、生成属性字典、创建类实例存储:

class Member: # 类名建议遵循PEP8规范用大驼峰,也可以保留原来的member2
    def __init__(self, realname, phone, emergencyContact, country):
        self.realname = realname
        self.phone = phone
        self.emergencyContact = emergencyContact
        self.country = country

# 存储所有成员实例的字典,键为用户名
member_dict = {}

with open("something.txt", 'r') as f:
    for line in f:
        line = line.strip()
        if not line: # 跳过空行
            continue
        # 拆分每行数据
        username, values_str = line.split(" = ")
        values = values_str.split('|')
        # 生成当前用户的属性字典
        attr_dict = dict(zip(text_keys, values))
        # 筛选类初始化需要的参数
        init_params = {field_map[k]: attr_dict[k] for k in field_map}
        # 创建类实例存入字典
        member_dict[username] = Member(**init_params)

# 测试取值,比如获取Austin的姓名
if "Austin" in member_dict:
    print(member_dict["Austin"].realname) # 输出 Stone Cold Austin
    print(member_dict["Austin"].phone) # 输出 996003892

原错误行的快速修复

如果你只需要修改原报错的那一行,只需要调整取值逻辑即可:

# 原错误代码:member2.realname = data2[values[2]]
# 修复后,先取第一层用户名对应的属性字典,再取姓名字段
austin_attr = data2["Austin"]
realname = austin_attr["Full Name"]
# 创建实例后再赋值
austin_member = member2(realname, austin_attr["Contact Details"], austin_attr["Emergency Contact Number"], austin_attr["Country"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:15:04