使用os.walk遍历文件夹返回None值,触发TypeError问题求助
问题分析:os.walk传入None导致TypeError错误
问题代码
import os def find_folders(folders): for folder in folders: return folder def find_directories(search_path,folder): for root, dirs, files in os.walk(search_path): for dir in dirs: if dir == folder: open_dir = os.path.join(root,dir) return open_dir def find_abundance_files(directory): for root,dirs,files in os.walk(directory): for file in files: if file.endswith(".tsv"): return file def main(): search_path = r"/mnt/e/Thesis/Parasponia_RNAseq/kal_out/" folders=["Medtru_BUD","Medtru_FLOWER","Medtru_LEAF","Medtru_NODULE","Medtru_ROOT","Medtru_SEED"] folder = find_folders(folders) directory = find_directories(search_path,folder) abundance_file = find_abundance_files(directory) if __name__=="__main__": main()
报错信息
Traceback (most recent call last): File "C:\Users\gidio\PycharmProjects\flask_blog\CalculateRPK_paired_end.py", line 105, in <module> main() File "C:\Users\gidio\PycharmProjects\flask_blog\CalculateRPK_paired_end.py", line 100, in main abundance_file = find_abundance_files(directory) File "C:\Users\gidio\PycharmProjects\flask_blog\CalculateRPK_paired_end.py", line 81, in find_abundance_files for root,dirs,files in os.walk(directory): File "C:\ProgramData\Anaconda3\lib\os.py", line 342, in walk return _walk(fspath(top), topdown, onerror, followlinks) TypeError: expected str, bytes or os.PathLike object, not NoneType
错误原因
find_folders函数逻辑失效:遍历文件夹列表时第一次循环就直接return folder,只会返回列表第一个元素Medtru_BUD,剩下的5个文件夹完全没处理;如果后续找不到这个文件夹,整个流程直接断档。find_directories无匹配时返回None:如果search_path里不存在指定的folder,函数遍历完所有目录也找不到匹配项,此时函数没有任何返回语句,默认返回None,这就是directory变量变成None的直接原因。- 路径实际不存在:报错显示运行环境是Windows(路径含
C:\Users),但代码里用的是Linux格式路径/mnt/e/...,如果这个路径在Windows下未正确挂载或拼写错误,os.walk遍历不到目标文件夹,find_directories自然返回None。 find_abundance_files未做参数校验:当传入的directory是None时,直接调用os.walk(directory)就会触发TypeError,因为os.walk要求传入有效的路径字符串,不能是None。
内容的提问来源于stack exchange,提问作者gforg34
相关产品推荐
相关产品推荐

