discord.py运行报错RuntimeError: Event loop is closed环境变量问题
问题根因
你遇到的AttributeError: 'NoneType' object has no attribute 'strip'报错核心是TOKEN变量为None,说明load_dotenv()没有成功加载到.env文件中的BOT_TOKEN值。后续的RuntimeError: Event loop is closed是主程序崩溃后的衍生异常,无需单独处理,解决变量加载问题后会自动消失。
解决方案
按以下步骤逐一排查修复即可:
修复.env文件加载路径
你当前代码中load_dotenv('.env')是基于脚本执行时的工作目录查找文件,若你执行脚本的目录和脚本所在目录不一致,就会找不到.env文件。建议修改为基于脚本绝对路径查找:# 替换原有的load_dotenv('.env')行 from pathlib import Path load_dotenv(Path(__file__).parent / '.env')这段代码会固定读取和当前脚本同目录下的.env文件,不受执行目录影响。
增加变量读取校验
读取TOKEN后增加校验逻辑,提前定位加载失败问题:TOKEN = os.environ.get('BOT_TOKEN') if not TOKEN: raise ValueError("BOT_TOKEN读取失败,请检查.env文件配置")排查.env文件本身问题
- 确认文件后缀正确:Windows默认隐藏已知文件后缀,避免实际文件名为
.env.txt而不是.env - 确认文件内容格式:
BOT_TOKEN=你的实际token,行首不要有空格,等号两侧不要加多余空格,token值不要加多余的引号(新版python-dotenv虽支持引号,但最简格式可避免格式兼容问题) - 确认文件编码为UTF-8,不要使用GBK或带BOM的UTF-8编码
- 确认文件后缀正确:Windows默认隐藏已知文件后缀,避免实际文件名为
临时测试验证
在load_dotenv执行后加入print(os.environ.get('BOT_TOKEN'))运行脚本,若输出你的token说明加载成功,删除测试代码即可正常运行;若输出为None,按上述步骤重新排查路径和文件配置即可。
内容的提问来源于stack exchange,提问作者HavocRT
相关产品推荐
相关产品推荐

