discord.py中client.run报错:类型错误或401认证失败排查
Discord机器人环境变量加载问题排查与解决方法
第一个错误:TypeError: expected token to be a str, received NoneType instead
原因
dotenv未正确读取到环境变量,常见触发场景:
.env文件路径错误,未与bot.py放在同一目录.env文件内变量名拼写错误(比如写成DISCORD_TOKE而非DISCORD_TOKEN).env内格式错误,给token加了引号或=前后留了空格- 代码中未调用
load_dotenv()完成环境变量加载
解决步骤
- 确保
.env文件与bot.py在同一目录,文件名严格为.env(注意开头的点,不要命名为env.txt) .env文件内格式必须为:
不要给token加引号,DISCORD_TOKEN=你的机器人完整token=前后不要留空格- 代码中加载逻辑要正确:
from dotenv import load_dotenv import os import discord # 先加载.env文件 load_dotenv() # 获取环境变量 TOKEN = os.getenv("DISCORD_TOKEN") # 提前校验,避免后续报错 if not TOKEN: raise ValueError("未获取到DISCORD_TOKEN,请检查.env文件配置") client = discord.Client(intents=discord.Intents.default()) # ...其他业务代码... client.run(TOKEN) - 确认已安装
python-dotenv依赖:pip install python-dotenv
第二个错误:discord.errors.LoginFailure: Improper token has been passed.
原因
- 手动export的token存在拼写错误、前后空格,或复制时遗漏部分字符
- 混淆了Discord机器人的token、客户端ID、公钥(只有token用于登录)
- 系统环境变量与dotenv加载的变量冲突,导致实际传入的token不正确
解决步骤
- 手动export时,确保token完全匹配Discord开发者后台的机器人token:
执行后用export DISCORD_TOKEN=你的机器人完整tokenecho $DISCORD_TOKEN检查输出,确认无空格、无遗漏 - 确认从Discord开发者后台复制的是机器人token:进入机器人页面,在"Token"板块点击"Copy",不要复制"Client ID"或"Public Key"
- 避免同时使用dotenv和手动export,二选一即可,防止变量冲突
- Windows系统设置环境变量的命令为:
set DISCORD_TOKEN=你的机器人完整token
额外注意事项
- 开源项目必须将
.env加入.gitignore文件,防止token泄露:.env - 若使用虚拟环境,确保
python-dotenv安装在当前虚拟环境内
内容的提问来源于stack exchange,提问作者John P
相关产品推荐
相关产品推荐

