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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:03