Python写入YAML文件报NoneType错误,append等方法均无效寻求解决方案
报错根因
- 空YAML文件执行
yaml.safe_load()时返回值为None,None类型不存在append方法,因此触发属性错误 - 其余潜在问题:
- 库导入写法错误,
import YAML应为import yaml,大小写错误会导致部分环境导入失败 - 手动拼接
程序名: 路径字符串的写法不符合YAML序列化规则,会导致最终生成的文件格式异常,无法正常读取 - 每扫描到一个可执行文件就两次打开YAML文件,磁盘IO开销极大,全盘扫描场景下会严重降低运行效率
- 未处理盘符不存在的异常,扫描无介质的A/B盘时会直接中断程序
- 库导入写法错误,
修复后代码
import os import yaml drives = ["A:\\", "B:\\", "C:\\", "D:\\", "E:\\", "F:\\", "G:\\", "H:\\", "I:\\", "J:\\", "L:\\"] # 提前初始化存储结构,用字典存储:key为程序名,value为路径,重复程序名会覆盖 program_dict = {} for drive in drives: # 先判断盘符是否存在,避免无介质盘符报错 if not os.path.exists(drive): continue print(f"Searching in drive: '{drive}'") for root, dirs, files in os.walk(drive): for file in files: if file.endswith('.exe'): full_path = os.path.join(root, file) print(f"File path: '{full_path}'") # 直接存入字典,无需手动拼接字符串 program_dict[file] = full_path # 所有文件扫描完成后统一写入YAML,仅需一次IO with open('programs.yaml', 'w', encoding='utf-8') as f: yaml.safe_dump(program_dict, f, sort_keys=False, allow_unicode=True)
补充说明
- 若你需要存储同文件名的多个不同路径,可将字典值改为列表类型,写入时判断键是否存在,存在则
append路径,不存在则初始化列表 - 代码中增加了
sort_keys=False参数,避免写入YAML时自动对键排序,保留扫描顺序 - 增加了
encoding='utf-8'和allow_unicode=True配置,避免路径包含中文时出现乱码
内容的提问来源于stack exchange,提问作者Tim Pierce
相关产品推荐
相关产品推荐

