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

Python Configparser解析带前导空格的INI文件触发AttributeError如何处理

错误原因

报错是因为默认配置下ConfigParser会将开头带空白的行识别为上一个键值的续行,当对应键配置了allow_no_value=True允许无值时,续行追加操作就会触发NoneType的append异常。

方案1:预过滤仅解析[FILES]区段(最稳妥)

完全不解析其他有问题的区段,不受无关垃圾内容影响,代码如下:

import configparser

def get_files_from_ini_file(info_file):
    files_section_lines = []
    in_files_section = False
    # 读取原文件并仅提取[FILES]区段内容
    with open(info_file, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            # 识别区段标记
            if stripped_line.startswith('[') and stripped_line.endswith(']'):
                in_files_section = (stripped_line == '[FILES]')
                continue
            # 收集FILES区段内的行
            if in_files_section:
                files_section_lines.append(line)
    # 构造仅含FILES区段的合法ini内容
    ini_content = '[FILES]\n' + ''.join(files_section_lines)
    ini = configparser.ConfigParser()
    ini.read_string(ini_content)
    if ini.has_section("FILES"):
        return [ini.get("FILES", i) for i in ini.options("FILES")]
    return []

print(get_files_from_ini_file("D:\\bad.ini"))

方案2:调整ConfigParser参数跳过全局解析错误

如果后续有解析其他区段的需求,可以直接修改ConfigParser的初始化参数,跳过无效行和禁用续行识别:

import configparser

def get_files_from_ini_file(info_file):
    ini = configparser.ConfigParser(
        allow_no_value=True,
        strict=False, # 忽略解析错误,自动跳过不符合规范的行
        multiline_values=False # 禁用续行识别,开头带空格的行不会被判定为上一个键的续值
    )
    ini.read(info_file)
    if ini.has_section("FILES"):
        pocket_files = [ini.get("FILES", i) for i in ini.options("FILES")]
        return pocket_files

print(get_files_from_ini_file("D:\\bad.ini"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:24:02