在Python IDLE中运行VS Code修改后的代码为何不生效?
问题解决:修改模块函数后调用仍返回空DataFrame
核心原因排查
你遇到的问题本质是模块导入缓存/文件路径不匹配,或是异常静默导致的无数据返回,具体分析:
- VS Code修改
stock_functions.py后,IDLE可能仍加载修改前的缓存版本,或是你编辑的文件与IDLE导入的并非同一路径的文件。 - 原函数用
except:静默捕获所有异常,可能某只股票的API调用失败但无报错提示,导致循环未生成有效数据。
分步解决方案
1. 确认模块文件路径是否匹配
在IDLE中执行以下代码,查看当前导入的stock_functions模块实际位置:
import projects.api.stock_functions as sf print(sf.__file__)
对比该路径与VS Code中编辑的文件路径:
- 若不一致:说明你编辑的是副本,找到IDLE加载的文件修改即可。
- 若一致:继续下一步。
2. 强制重新加载模块
无需重启IDLE,直接在会话中跳过缓存重新加载模块:
import importlib import projects.api.stock_functions as sf importlib.reload(sf)
之后再次调用sf.combined_events(l)测试。
3. 取消异常静默,排查API调用错误
修改combined_events的异常捕获逻辑,打印错误信息,避免因API调用失败导致无数据:
def combined_events(list_arg): appEvents = pd.DataFrame() for ticker in list_arg: try: events = sf.get_event_data_to_dataframe(ticker) appEvents = pd.concat([appEvents, events], ignore_index=True) except Exception as e: print(f"处理{ticker}时出错: {str(e)}") return appEvents
保存后重新加载模块调用,即可看到是否有API调用失败的情况,针对性修复。
4. 优化concat使用(可选)
反复调用concat效率较低,可先收集所有DataFrame到列表,最后一次性合并:
def combined_events(list_arg): df_list = [] for ticker in list_arg: try: events = sf.get_event_data_to_dataframe(ticker) df_list.append(events) except Exception as e: print(f"处理{ticker}时出错: {str(e)}") return pd.concat(df_list, ignore_index=True) if df_list else pd.DataFrame()
内容的提问来源于stack exchange,提问作者Timothy B
相关产品推荐
相关产品推荐

