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

递归函数执行后Pandas DataFrame返回None?求技术排查

问题分析与解决方案

嘿,我一眼就瞅出问题所在了——你的递归函数在递归调用环节没把结果传递回来!

你看,当iter > 0的时候,你调用了findSubFoldersMultiple(iter-1, combined_data_container),但这个调用的结果你没有返回给上层函数。所以当递归一层层往回走时,每一层函数执行完这个调用后,都没有任何return语句,自然就默认返回None了——哪怕最底层的else分支确实返回了正确的DataFrame,也没法传递到顶层调用里。

给你修复好的代码,还加了几个实用小优化:

import sys, os, glob
from glob import glob
import pandas as pd

def findSubFoldersMultiple(iter, data_container):
    if iter > 0:
        current_directory = sys.argv[iter]
        # 用os.path.join拼接路径,适配Windows/Linux不同的路径分隔符
        directory_reformatted = os.path.join(current_directory, "*", "")
        folders = glob(directory_reformatted)
        # 用os.path.relpath替代手动字符串替换,更可靠地获取子文件夹名称
        folders_stripped = [os.path.relpath(folder, current_directory).replace(os.sep, "") for folder in folders]
        curr_data_container = pd.DataFrame({current_directory: folders_stripped})
        combined_data_container = pd.concat([data_container, curr_data_container], axis=1)
        # 关键修复:把递归调用的结果返回给上层
        return findSubFoldersMultiple(iter-1, combined_data_container)
    else:
        print('Populated container in loop: \n')
        print(data_container)
        return data_container

if len(sys.argv)<2:
    print ("Please specify directory/directories.")
else:
    writer = pd.ExcelWriter('subfolders.xlsx')
    empty_frame = pd.DataFrame({})
    populated_DF = findSubFoldersMultiple(len(sys.argv) - 1, empty_frame)
    print('Returned container: \n')
    print(populated_DF)
    # 补上原代码遗漏的Excel保存步骤
    populated_DF.to_excel(writer, index=False)
    writer.close()

关键说明:

  • 核心修复:在iter > 0的分支里添加return,让递归调用的结果能逐层传递回去,这样顶层的populated_DF就能拿到最终拼接好的DataFrame了。
  • 路径处理优化:用os.path.join和os.path.relpath替代手动拼接/替换字符串,避免因为系统路径分隔符(Windows是\,Linux是/)导致的错误。
  • 补充Excel保存:原代码只创建了ExcelWriter,但没有把DataFrame写入文件并关闭Writer,现在补上了这一步,运行后就能得到真正的subfolders.xlsx文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:46:04