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

Python函数导入后无返回且不执行问题求助

Python Pandas函数模块调用问题解决方案

问题描述

我花了数小时自行调试却毫无进展,急需技术帮助。编写了function1.py模块,其中getMerged函数借助Pandas读取多个CSV文件,按规则合并后需完成两项操作:1)打印合并后的DataFrame;2)将DataFrame写入Excel文件。

当function1.py作为主程序运行(文件末尾添加调用代码)时,函数运行完全正常。但将其作为模块导入其他文件调用时(仅保留函数定义,删除末尾调用代码),出现以下问题:

  • 无法在函数外部获取返回的composite对象,尝试过return语句、全局变量、赋值给变量等多种方法均无效;
  • 在other.py中导入getMerged并调用时,无报错但函数完全不执行;
  • 曾在函数内添加递归调用,虽有反应但陷入无限循环,仍无法实现预期效果。

相关代码

function1.py的函数定义

def getMerged(csv_files, output_name):

    import pandas as pd

    list_of_expiry_dfs = []

    for csvfile in csv_files:
        names = ['date', 'open', 'high', 'low', 'close', 'vol']             
        df = pd.read_csv(csvfile, sep=';', names=names)
        df = df.set_index('date')
        list_of_expiry_dfs.append(df)

    x = 1

    composite = list_of_expiry_dfs[0]
    for each in list_of_expiry_dfs:
        composite = composite.join(each, lsuffix=x-1, rsuffix=x, how='outer')
        x = x + 1

    yaxis =[]
    for expiry in csv_files:
        open_col = 'open (' + expiry[:6] + ")"
        high_col = 'high (' + expiry[:6] + ")"
        low_col = 'low (' + expiry[:6] + ")"
        close_col = 'close (' + expiry[:6] + ")"
        vol_col = 'vol (' + expiry[:6] + ")"
        yaxis.append(open_col)
        yaxis.append(high_col)
        yaxis.append(low_col)
        yaxis.append(close_col)
        yaxis.append(vol_col)
    composite.columns = yaxis

    print(composite)
    composite.to_excel(output_name, header=True)

注:代码中把open变量名改为open_col,避免与内置函数open冲突

function1.py作为主程序时的调用代码

csv_files = [
'BZ1219.csv',
'BZ0120.csv',
'BZ0220.csv',
'BZ0320.csv',
'BZ0420.csv'
]

getMerged(csv_files, output_name='test.xlsx')

other.py的导入调用代码

csv_files = ['BZ1219.csv','BZ0120.csv','BZ0220.csv','BZ0320.csv','BZ0420.csv']
output_name = "test.xlsx"

from function1 import getMerged

getMerged(csv_files=csv_files, output_name=output_name)

解决方案

1. 解决无法获取返回composite对象的问题

当前函数没有返回值,只需在函数末尾添加return composite语句,调用时将函数结果赋值给变量即可获取:

修改后的getMerged函数末尾:

print(composite)
composite.to_excel(output_name, header=True)
return composite  # 新增返回语句

在other.py中调用时获取返回值:

result = getMerged(csv_files=csv_files, output_name=output_name)
# 现在result即为合并后的DataFrame对象,可进行后续操作

2. 解决other.py调用函数无执行的问题

按以下步骤排查修正:

  • 检查文件路径:确保function1.py与other.py在同一目录,或function1.py所在目录已加入Python的sys.path;
  • 检查CSV文件位置:csv_files使用的是相对路径,需确保这些CSV文件与other.py在同一目录,或改用绝对路径;
  • 安装依赖库:执行pip install pandas openpyxl,确保pandas和openpyxl(写入Excel必需)已安装;
  • 修正合并逻辑bug:原循环会将第一个DataFrame与自身合并,导致重复列,应从第二个DataFrame开始循环:
    composite = list_of_expiry_dfs[0]
    x = 1
    for each in list_of_expiry_dfs[1:]:  # 从第二个元素开始遍历
        composite = composite.join(each, lsuffix=x-1, rsuffix=x, how='outer')
        x += 1
    

3. 解决递归调用导致无限循环的问题

该场景完全不需要递归调用,直接删除函数内的递归代码即可,使用普通循环处理CSV文件合并逻辑就足够。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:37