os.walk()遍历存在文件的目录却返回None的技术求助
问题分析与解决
你的函数返回None的核心原因有两个:
- return语句缩进错误:你把
return file_list写在了os.walk的循环内部,这会导致第一次迭代就直接返回结果;但如果传入的目录无效(比如不存在、无访问权限),os.walk的循环根本不会执行,函数没有任何return语句,Python会默认返回None。 - 未处理无效目录场景:当目录无法被遍历的时候,循环不执行,函数无返回值,最终返回
None。
修复后的代码
遍历文件的版本
import os def list_files(directory): file_list = [] for _, _, files in os.walk(directory): for name in files: file_list.append(name) # 将return移到循环外部,确保无论是否遍历到内容都会返回列表 return file_list
遍历目录的版本
import os def list_dirs(directory): dir_list = [] for _, dirs, _ in os.walk(directory): for name in dirs: dir_list.append(name) return dir_list
额外优化建议
如果需要返回完整文件路径而非仅文件名,可以修改append的内容,同时保留os.walk返回的当前目录路径root:
def list_files_with_path(directory): file_list = [] for root, _, files in os.walk(directory): for name in files: file_list.append(os.path.join(root, name)) return file_list
内容的提问来源于stack exchange,提问作者subodhpokhrel7
相关产品推荐
相关产品推荐

