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

如何修复删除空文件夹时出现的FileNotFoundError及嵌套文件夹删除问题

问题修复方案

错误原因分析

  1. FileNotFoundError:原函数未检查文件夹是否存在就调用os.listdir,如果传入的路径列表包含已被删除的路径(比如嵌套文件夹被清理后,后续遍历到该路径),就会触发找不到路径的错误;同时原函数未处理路径不存在的边界情况。
  2. 嵌套空文件夹仅删内层:原函数只处理传入的顶层路径,不会递归遍历子文件夹,且没有遵循从底层到上层的删除顺序,导致外层文件夹在子文件夹被删除后,因未被重新检查而无法被清理。

修复后的代码

import os

def delete_empty_folders(paths_to_folders, ignore_list):
    # 递归处理文件夹,确保从最底层开始删除
    def delete_recursive(folder_path):
        # 先检查路径是否存在,跳过已被删除的路径
        if not os.path.exists(folder_path):
            return
        
        # 先遍历并处理所有子文件夹
        for item in os.listdir(folder_path):
            item_path = os.path.join(folder_path, item)
            if os.path.isdir(item_path):
                delete_recursive(item_path)
        
        # 子文件夹处理完成后,检查当前文件夹是否符合删除条件
        folder_name = os.path.split(folder_path)[-1]
        if folder_name not in ignore_list and not os.listdir(folder_path):
            os.rmdir(folder_path)
    
    # 逐个处理传入的顶层文件夹路径
    for folder_path in paths_to_folders:
        delete_recursive(folder_path)

关键修复点

  • 路径存在校验:在递归函数开头增加os.path.exists判断,避免访问已被删除的路径引发错误。
  • 递归遍历+从底向上删除:先递归清理所有子文件夹,待子文件夹处理完毕后再检查当前文件夹是否为空,确保外层文件夹在子文件夹被清理后,若为空也能被删除。
  • 代码细节修正:将ignore_list作为参数传入函数,避免全局变量依赖;修正原函数的拼写错误delete_empy_folders为delete_empty_folders,split改为os.path.split。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:55:19