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

Python跨文件调用函数输出结果与原文件运行不一致问题求助

问题根因

你代码里的eastern_list/central_list/mountain_list/pacific_list是全局变量,直接运行sentiment_analysis.py时,每次运行进程重启,全局列表初始为空,计算结果自然正确。但当该模块被导入到main.py/driver.py中运行时,模块只会初始化一次,多次调用compute_tweets函数时,之前调用存入四个全局列表的推文不会被清空,数据会持续累加,最终导致统计的推文总数远大于实际文件的行数,和你描述的错误现象完全吻合。

修复方案

推荐用无副作用的写法替换全局变量的用法,避免跨调用数据残留:

  1. 修改determine_timezone函数,不操作全局列表,而是在函数内部初始化四个空列表,处理完成后直接返回四个列表的元组
    示例修改后的determine_timezone代码:
def determine_timezone(tweet_list):
    # 函数内部初始化列表,不存在跨调用残留
    eastern_list = []
    central_list = []
    mountain_list = []
    pacific_list = []
    for index, tweet in enumerate(tweet_list):
        long_lat = get_longlat(tweet)
        if float(long_lat[0]) <= float(p1[0]) and float(long_lat[0]) >= float(p2[0]):
            if float(long_lat[1]) <= float(p1[1]) and float(long_lat[1]) > float(p3[1]):
                eastern_list.append(tweet_list[index])
            elif float(long_lat[1]) <= float(p3[1]) and float(long_lat[1]) > float(p5[1]):
                central_list.append(tweet_list[index])
            elif float(long_lat[1]) <= float(p5[1]) and float(long_lat[1]) > float(p7[1]):
                mountain_list.append(tweet_list[index])
            elif float(long_lat[1]) <= float(p7[1]) and float(long_lat[1]) >= float(p9[1]):
                pacific_list.append(tweet_list[index])
    # 直接返回四个列表,不需要全局变量
    return eastern_list, central_list, mountain_list, pacific_list
  1. 对应修改compute_tweets中调用该函数的逻辑,接收返回的四个列表再传入后续计算:
# 替换原来的determine_timezone(tweet_list)调用
eastern_list, central_list, mountain_list, pacific_list = determine_timezone(tweet_list)
eastern = calculations(keyword_dict, eastern_list)
central = calculations(keyword_dict, central_list)
mountain = calculations(keyword_dict, mountain_list)
pacific = calculations(keyword_dict, pacific_list)
  1. 额外排查点:如果修改后仍有问题,可确认调用compute_tweets时传入的文件路径是否正确,不同运行入口的工作目录不同可能导致读取到错误的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:05