Heroku部署discord.py机器人提示找不到JSON前缀配置文件如何解决
问题原因
你的判断完全正确,该报错是Windows与Linux系统的路径分隔符规则差异导致的:
- Windows系统使用反斜杠
\作为路径分隔符,你代码中写的storage\\pp.json在本地Windows环境可以正常识别 - Heroku的运行环境为Linux系统,Linux使用正斜杠
/作为路径分隔符,硬编码的反斜杠会被系统识别为文件名的一部分,而非路径分隔符,因此触发找不到文件的报错。
解决方案
不要硬编码路径分隔符,使用Python自带的跨平台路径处理工具自动适配不同系统的规则,推荐两种实现方式:
方案1:使用os.path.join(兼容所有Python版本)
调用os.path.join拼接路径,工具会自动根据运行系统选择对应的分隔符,修改后代码如下:
import os import json async def get_prefix(client, message): # 自动适配系统的路径拼接 prefix_path = os.path.join('storage', 'pp.json') with open(prefix_path, 'r') as f: prefixes = json.load(f) try: prs = prefixes[str(message.guild.id)] except KeyError: prs = "p." return prs
方案2:使用pathlib(Python 3.4+支持,写法更简洁)
pathlib是Python官方推荐的现代化路径处理工具,面向对象的写法更易读,修改后代码如下:
from pathlib import Path import json async def get_prefix(client, message): # 自动适配系统的路径拼接 prefix_path = Path('storage') / 'pp.json' with open(prefix_path, 'r') as f: prefixes = json.load(f) try: prs = prefixes[str(message.guild.id)] except KeyError: prs = "p." return prs
额外注意事项
Heroku的文件系统是临时的:如果你在代码运行过程中会修改pp.json的内容,那么每次dyno重启、重新部署时,所有对本地文件的修改都会被重置丢失。如果需要持久化存储自定义前缀配置,建议使用Heroku提供的免费PostgreSQL、Redis附加组件,或其他外部数据库存储数据。
内容的提问来源于stack exchange,提问作者bat beat
相关产品推荐
相关产品推荐

