You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()完成环境变量加载

解决步骤

  1. 确保.env文件与bot.py在同一目录,文件名严格为.env(注意开头的点,不要命名为env.txt)
  2. .env文件内格式必须为:
    DISCORD_TOKEN=你的机器人完整token
    
    不要给token加引号,=前后不要留空格
  3. 代码中加载逻辑要正确:
    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)
    
  4. 确认已安装python-dotenv依赖:
    pip install python-dotenv
    

第二个错误:discord.errors.LoginFailure: Improper token has been passed.

原因

  • 手动export的token存在拼写错误、前后空格,或复制时遗漏部分字符
  • 混淆了Discord机器人的token、客户端ID、公钥(只有token用于登录)
  • 系统环境变量与dotenv加载的变量冲突,导致实际传入的token不正确

解决步骤

  1. 手动export时,确保token完全匹配Discord开发者后台的机器人token:
    export DISCORD_TOKEN=你的机器人完整token
    
    执行后用echo $DISCORD_TOKEN检查输出,确认无空格、无遗漏
  2. 确认从Discord开发者后台复制的是机器人token:进入机器人页面,在"Token"板块点击"Copy",不要复制"Client ID"或"Public Key"
  3. 避免同时使用dotenv和手动export,二选一即可,防止变量冲突
  4. Windows系统设置环境变量的命令为:
    set DISCORD_TOKEN=你的机器人完整token
    

额外注意事项

  • 开源项目必须将.env加入.gitignore文件,防止token泄露:
    .env
    
  • 若使用虚拟环境,确保python-dotenv安装在当前虚拟环境内

内容的提问来源于stack exchange,提问作者John P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:31