Python Discord Bot报错TypeError:预期token为str却收到NoneType的解决方法
解决Discord Bot报错:TypeError: expected token to be a str, received NoneType instead
这个错误的核心原因是你通过os.getenv('TOKEN')获取机器人令牌时,拿到的是None——也就是说系统里根本没找到名为TOKEN的环境变量,或者变量名写错了。下面是几种可行的修复方案:
方案1:临时设置环境变量(Windows命令行)
- 打开命令提示符,切换到你的项目目录
- 输入命令:
set TOKEN=你的机器人令牌(把你的机器人令牌替换成你从Discord开发者后台复制的真实令牌) - 然后正常运行你的Python脚本
方案2:永久设置Windows环境变量
- 右键「此电脑」→ 属性 → 高级系统设置 → 环境变量
- 在「用户变量」区域点击「新建」,变量名填
TOKEN,变量值填你的机器人令牌 - 保存后重启命令提示符,再运行脚本
方案3:临时直接写令牌(仅用于测试,不推荐上线)
- 把代码最后一行的
client.run(os.getenv('TOKEN'))改成:
client.run('你的机器人令牌')
注意:上线前一定要改回环境变量的方式,避免令牌泄露。
方案4:用.env文件管理令牌(推荐长期项目使用)
- 先安装依赖库:
pip install python-dotenv - 在项目根目录创建
.env文件,内容只写一行:
TOKEN=你的机器人令牌
- 修改你的代码,在开头添加两行:
from dotenv import load_dotenv load_dotenv()
这样os.getenv('TOKEN')就能正确读取到.env里的令牌了。
额外注意事项
- 确认复制的机器人令牌没有多余的空格或换行,令牌是一串无格式的字符串
- 如果用
.env文件,记得把.env加入.gitignore文件,防止提交到代码仓库泄露令牌
内容的提问来源于stack exchange,提问作者turtlesXD
相关产品推荐
相关产品推荐

