Python Telegram Bot启动报FileNotFoundError问题求助
解决方案
1. 检查PyCharm运行配置的工作目录
问题核心大概率是运行时工作目录被修改,导致相对路径解析错误。之前正常运行是因为工作目录是项目根目录E:\FindBot,现在可能被改成了E:\FindBot\handlers\users之类的子目录。
- 打开PyCharm的「Run/Debug Configurations」
- 找到你的机器人运行配置,查看「Working directory」选项
- 确保它被设置为项目根目录
E:\FindBot(而非子目录)
2. 用动态路径替代硬编码绝对路径
硬编码绝对路径会导致项目移动或部署时失效,推荐通过脚本自身路径动态生成文件路径:
修改loader.py中的文件读取代码:
import os # 获取当前脚本(loader.py)所在的项目根目录 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 拼接JSON文件的完整路径 json_file_path = os.path.join(BASE_DIR, "include", "sc_prices.json") with open(json_file_path, encoding="utf-8") as file: # 你的后续处理逻辑 data = json.load(file)
这种方式不管工作目录是什么,都能正确定位到sc_prices.json文件。
3. 排查机器人退出码0的原因
当使用绝对路径时,脚本返回Process finished with exit code 0说明脚本正常执行完毕,但机器人没有启动运行循环。检查你的启动逻辑:
- 确保在主入口脚本(比如
start.py或loader.py)中有启动机器人的代码:
from aiogram import executor # 初始化dp等逻辑... if __name__ == "__main__": # 启动长轮询模式 executor.start_polling(dp, skip_updates=True)
如果缺少这段代码,脚本执行完初始化逻辑后就会直接退出,不会维持机器人运行。
4. 验证文件读取权限
重装Windows系统后,项目目录的权限可能发生变化:
- 右键点击
include文件夹,选择「属性」→「安全」 - 确认当前登录用户拥有该文件夹的「读取」权限
内容的提问来源于stack exchange,提问作者Pudge
相关产品推荐
相关产品推荐

