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

Python脚本在运行对话框报FileNotFoundError,命令行/IDE正常

问题分析与解决:运行对话框执行Python脚本时的文件找不到错误

核心原因:工作目录不一致

在PyCharm或Windows命令行运行脚本时,程序的工作目录默认是脚本所在文件夹,用相对路径'QB_stats.xlsx'能正确定位文件。但通过运行对话框(Win+R)执行时,系统默认工作目录是你的用户主目录(比如C:\Users\你的用户名),脚本会去这个目录查找Excel文件,自然找不到,从而抛出FileNotFoundError。

代码问题与改进建议

1. 修复文件路径问题(解决报错的关键)

用绝对路径替代相对路径,确保无论在哪里运行都能定位到Excel文件。借助os模块获取脚本所在目录,再拼接文件路径:

# 在被调用脚本顶部导入os模块
import os

# 获取当前脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接QB_stats.xlsx的绝对路径
qb_excel_path = os.path.join(script_dir, 'QB_stats.xlsx')

# 后续加载和保存都使用该变量
wb = openpyxl.load_workbook(qb_excel_path)
# ...
wb.save(qb_excel_path)

2. 修复未定义变量错误

被调用脚本中wb = openpyxl.load_workbook(file_path)的file_path是未定义变量,直接替换为上面的qb_excel_path即可。

3. 优化异常处理

原代码用except:捕获所有异常,会掩盖真正的问题(比如网页结构变化、网络错误)。建议捕获特定异常并添加明确提示:

try:
    tag = 'switcher_passing'
    main = doc.find(id=tag)
    table = main.find(id='div_passing')
    data = table.find(id='passing')
    stats = data.find('tbody')
except AttributeError:
    print(f"无法找到{tag}标签,尝试备用标签")
    tag = 'all_passing'
    main = doc.find(id=tag)
    if not main:
        print("无法获取球员数据,请检查URL或网页结构")
        return "失败:无法获取数据"
    table = main.find(id='div_passing')
    data = table.find(id='passing')
    stats = data.find('tbody')

4. 加强参数验证

主脚本参数处理存在漏洞:若用户传入参数但数量不足(比如只传名字没传位置)会直接报错,提前添加判断更友好:

if len(sys.argv) > 1:
    if len(sys.argv) < 4:
        print("参数错误:需要传入 名 姓 位置(例如:Tom Brady QB)")
        sys.exit(1)
    name = f"{sys.argv[1]} {sys.argv[2]}"
    pos = sys.argv[3]
    if pos not in positions:
        print(f"无效位置,可选位置:{', '.join(positions)}")
        sys.exit(1)
else:
    name = input('Enter player name: ')
    pos = input('Enter play position (Example: WR, QB, etc.): ')

5. 移除冗余操作

被调用脚本重复加载了两次工作簿,删除第一次加载的代码,仅保留一次即可。

6. 优化Excel写入循环

原嵌套循环会导致重复写入数据,改为更高效的映射方式:

# 建立工作表名与工作表对象的映射
sheet_map = {sheet_name: wb[sheet_name] for sheet_name in wb.sheetnames}

# 遍历统计数据,找到对应工作表写入
for year_stat in total_stats:
    year_str = str(year_stat[1])
    if year_str in sheet_map:
        sheet_map[year_str].append(year_stat)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:05:17