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

Python初始化Employee类触发KeyError: 'first_name'如何修复

报错根因

运行时抛出的错误信息如下:

self.first_name = employe_data['first_name']
KeyError: 'first_name'

触发这个错误的核心逻辑是:使用字典[键名]语法取值时,当前传入的employe_data字典内不存在名为first_name的键。你确认数据库字段名正确只能排除数据库侧的命名问题,实际问题出在「从MySQL查询结果到传入Employee类的参数转换链路」上,和类内部写的键名拼写无关。

可行修复方案

1. 优先排查取数字段映射问题

这是90%同类问题的诱因,按顺序检查:

  • 检查查询MySQL的SQL语句:如果写了明确的字段查询列表,确认没有遗漏first_name字段;临时排查可先用SELECT * FROM 你的员工表执行,确认返回结果集包含该字段
  • 检查数据库驱动配置:如果用pymysql、mysql-connector等原生驱动,确认取数时使用了字典游标(否则返回结果是元组,解包为**kwargs时键是数字索引,不可能匹配字符串键名)
  • 检查中间数据处理逻辑:如果查询后对结果做了字段重命名、格式转换,确认没有误改first_name的键名,比如不小心转成小驼峰firstName、首字母大写First_name这类拼写偏差。

2. 代码层增加容错,避免单字段缺失直接崩溃

把原来直接用方括号硬取值的逻辑,改成字典的.get()方法取值,键不存在时默认返回None,刚好适配你__str__方法里对空值的判断逻辑,不会再触发KeyError。修复后的完整代码如下:

class Employee:

    def __init__(self, **employe_data):
        self.employee_id = employe_data.get('employee_id')
        self.first_name = employe_data.get('first_name')
        self.last_name = employe_data.get('last_name')
        self.born = employe_data.get('born')
        self.photo = employe_data.get('photo')
        self.moto = employe_data.get('moto')
        self.position_company = employe_data.get('position_company')


    def __str__(self) -> str:
        employee = []
        if self.first_name is not None:
            employee.append(self.first_name)
        if self.last_name is not None:
            employee.append(self.last_name)
        
        return " ".join(employee)

3. 加调试代码快速定位参数问题

如果排查完还是找不到问题,在__init__方法第一行加一行调试代码,运行后直接看控制台输出的传入字段列表,就能一眼看到底传了哪些键、有没有拼写错误:

print("当前传入的员工数据字段:", list(employe_data.keys()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:03:39