Python跨文件调用函数输出结果与原文件运行不一致问题求助
问题根因
你代码里的eastern_list/central_list/mountain_list/pacific_list是全局变量,直接运行sentiment_analysis.py时,每次运行进程重启,全局列表初始为空,计算结果自然正确。但当该模块被导入到main.py/driver.py中运行时,模块只会初始化一次,多次调用compute_tweets函数时,之前调用存入四个全局列表的推文不会被清空,数据会持续累加,最终导致统计的推文总数远大于实际文件的行数,和你描述的错误现象完全吻合。
修复方案
推荐用无副作用的写法替换全局变量的用法,避免跨调用数据残留:
- 修改
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
- 对应修改
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)
- 额外排查点:如果修改后仍有问题,可确认调用
compute_tweets时传入的文件路径是否正确,不同运行入口的工作目录不同可能导致读取到错误的文件。
内容的提问来源于stack exchange,提问作者FreezieX17
相关产品推荐
相关产品推荐

