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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:55:30