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

终端运行正常但Windows任务计划执行Python脚本报KeyError

排查Windows任务计划执行Python脚本的KeyError问题

问题场景

使用命令py C:\Users\Administrator\Desktop\test\main.py在终端、PyCharm中运行正常,但通过Windows任务计划执行时抛出KeyError: 'Key',错误栈指向脚本第167行的DataFrame列索引操作:

new_events = df.loc[~df['Key'].isin(previous_df['Key']) & ~df['Key'].isin(sent_events_df['Key'])]

已测试简单示例程序可正常执行,脱离虚拟环境后终端运行也正常,且使用管理员权限执行任务。

遗漏的排查点

  • 强制指定工作目录:Windows任务计划默认工作目录不是脚本所在路径,若脚本中使用相对路径读取本地文件(如历史数据csv),会导致读取失败或读入空数据,进而使DataFrame缺失'Key'列。解决:要么把脚本里所有文件路径改成绝对路径,要么在任务计划的「操作」→「起始于(可选)」中填写脚本所在目录C:\Users\Administrator\Desktop\test。
  • 使用绝对路径的Python解释器:终端的py命令可能和任务计划环境中的py指向不同版本的Python,导致pandas行为差异。直接用完整路径调用解释器,比如C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe C:\Users\Administrator\Desktop\test\main.py,避免版本混淆。
  • 验证数据来源的访问权限:如果scrape_data函数是从网络接口、共享文件夹或数据库拉取数据,任务计划的运行账户(即使是管理员)可能没有对应访问权限,导致拉取的数据为空或格式错误,最终DataFrame没有'Key'列。可以在脚本里加日志记录原始数据的状态。
  • 添加调试日志:在scrape_data函数开头加入日志,把DataFrame的列名、形状写入本地文件,对比正常环境和任务计划环境的差异。示例代码:
import logging
# 初始化日志(放在脚本开头)
logging.basicConfig(
    filename='C:/Users/Administrator/Desktop/test/debug_task.log',
    level=logging.INFO,
    format='%(asctime)s - %(message)s'
)

# 在scrape_data函数内添加
logging.info(f"当前df列名: {df.columns.tolist()}")
logging.info(f"当前df行数: {df.shape[0]}")
logging.info(f"previous_df列名: {previous_df.columns.tolist()}")

执行任务后查看日志,就能明确是哪个DataFrame出了问题。

  • 检查任务计划的执行上下文:如果任务设置为「不管用户是否登录都要运行」,后台运行时可能缺失某些环境变量或网络连接(比如脚本依赖代理、特定网络)。先改成「仅当用户登录时运行」测试,看是否能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:40:22