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

使用Python的configparser读取ini配置文件时出现KeyError: 'user'是什么原因

问题解答

错误含义

KeyError: 'user'是Python的标准字典访问异常,含义是你尝试访问的键名在目标字典中不存在。从错误栈可以看到异常触发在config["books"]["user"]这行代码,说明ConfigParser读取内容后,要么没有加载到[books]配置节点,要么[books]节点下没有user这个配置项。

为什么你配置文件里写了user还会报错?

你提供的config.ini内容本身没有问题,触发错误的核心原因绝大多数情况是程序没有成功读取到config.ini文件,而非配置项缺失:

  • config.read("config.ini")使用了相对路径,只会在你执行Python命令的当前工作目录查找配置文件,不会自动从代码文件db.py所在的目录查找。如果运行脚本的工作目录和config.ini存放目录不一致,就会读取失败,ConfigParser对象内没有任何配置项,自然就会抛出KeyError。
  • 小概率原因包括config.ini编码异常、文件权限不足导致ConfigParser无法正常解析文件内容。

修复方案

方案1:使用绝对路径读取配置(适合本地测试)

直接写死配置文件的完整路径,避免相对路径查找失败的问题:

config.read("/home/vojtam/Desktop/mydb/config.ini")

方案2:动态拼接配置路径(适配多环境)

通过代码自动获取当前脚本所在目录,拼接配置文件路径,不管在哪个工作目录执行都能正确找到配置:

import os
from configparser import ConfigParser
import pymysql as mysql

class DatabaseG:
    def __init__(self):
        config = ConfigParser()
        # 获取当前db.py文件所在的目录
        current_dir = os.path.dirname(os.path.abspath(__file__))
        # 拼接得到config.ini的绝对路径
        config_path = os.path.join(current_dir, "config.ini")
        config.read(config_path)
        
        # 可选:加配置校验,提前暴露问题
        if not config.sections():
            raise FileNotFoundError(f"配置文件{config_path}读取失败,请检查路径/权限/编码是否正常")
        if "books" not in config:
            raise ValueError("配置文件中缺失[books]节点")
        
        self.connection = mysql.connect(
                user=config["books"]["user"],
                passwd=config["books"]["password"],
                host=config["books"]["host"],
                db=config["books"]["database"],
        )
        self.cursor = self.connection.cursor()
        # 提示:原SQL中book_id未指定字段类型,执行会报错,需补全类型,示例如下
        query = """
                CREATE TABLE BOOKS (book_url TEXT, book_id INT)
                """
        self.cursor.execute(query)

db = DatabaseG()

额外提示:你原有代码中的建表SQL语法不完整,book_id字段没有指定类型,后续执行会抛出SQL语法错误,上述修复代码中已经做了示例修改,你可以根据实际需求调整字段类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:06:04