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

Python遍历文件夹创建输出目录保存文件时报TypeError问题如何解决

问题原因
  • 第一点:output_dir 变量类型错误。你使用列表推导式 [dir for dir in os.listdir() if dir.startswith("Result_"+ i)] 给 output_dir 赋值,列表推导式的返回结果永远是列表类型,而非路径字符串。当你把列表类型传给需要接收路径参数的 os.makedirs 方法时,就会触发你遇到的类型报错。
  • 第二点:try-except 逻辑完全错误。列表推导式找不到匹配结果时只会返回空列表,不会抛出异常,所以你的 except 分支几乎永远不会触发,这也是为什么你把 function 写在 except 里时无法执行的原因。
  • 第三点:os.mkdir 方法的返回值为 None,你将它赋值给 output_dir 后传给 function,同样会导致路径参数无效。
修复方案

你定义的 function 中已经写了 os.makedirs(output_dir, exist_ok=True),这个参数会自动判断目录是否存在,不存在就新建,完全不需要额外写判断逻辑,直接构造输出目录名调用即可。

修复后的完整代码如下:

import os

def function(input_dir, output_dir):
    os.makedirs(output_dir, exist_ok=True)
    im_list = [file for file in os.listdir(input_dir) if file.endswith(".png")]
    # 后续处理逻辑写在此处

Inputs = [dir for dir in os.listdir() if dir.startswith("DATASET_")]
for input_dir in Inputs:
    output_dir = "Result_" + input_dir
    function(input_dir, output_dir)

如果你确实需要保留查找已有输出目录的逻辑,可以修改为如下写法,手动判断列表是否为空、取列表第一个元素作为路径:

import os

def function(input_dir, output_dir):
    os.makedirs(output_dir, exist_ok=True)
    im_list = [file for file in os.listdir(input_dir) if file.endswith(".png")]
    # 后续处理逻辑写在此处

Inputs = [dir for dir in os.listdir() if dir.startswith("DATASET_")]
for input_dir in Inputs:
    output_dir_list = [dir for dir in os.listdir() if dir.startswith("Result_"+ input_dir)]
    # 判断是否匹配到已有输出目录
    output_dir = output_dir_list[0] if output_dir_list else "Result_" + input_dir
    function(input_dir, output_dir)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:45:03