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
相关产品推荐
相关产品推荐

