如何修复删除空文件夹时出现的FileNotFoundError及嵌套文件夹删除问题
问题修复方案
错误原因分析
- FileNotFoundError:原函数未检查文件夹是否存在就调用
os.listdir,如果传入的路径列表包含已被删除的路径(比如嵌套文件夹被清理后,后续遍历到该路径),就会触发找不到路径的错误;同时原函数未处理路径不存在的边界情况。 - 嵌套空文件夹仅删内层:原函数只处理传入的顶层路径,不会递归遍历子文件夹,且没有遵循从底层到上层的删除顺序,导致外层文件夹在子文件夹被删除后,因未被重新检查而无法被清理。
修复后的代码
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
相关产品推荐
相关产品推荐

