You need to enable JavaScript to run this app. 使用discord.py开发Discord机器人运行触发AttributeError报错求助
优惠活动
大模型
产品
解决方案
定价
更多

使用discord.py开发Discord机器人运行触发AttributeError报错求助

问题核心定位

这个报错和依赖安装完全无关——报错触发链路已经走到discord.py的登录请求阶段,说明discord、python-dotenv相关依赖都已经正常安装加载。
问题的根源是**os.getenv()的使用逻辑完全错误**,最终导致获取到的Token值为空(None),后续代码执行.strip()方法时触发空对象属性调用报错。
具体错误点:你当前的代码把机器人Token本身当成了环境变量的键名传给os.getenv(),程序会去系统环境里查找键名为这一长串Token字符串的配置项,因为根本不存在这个配置,自然返回None。

分步解决方法
  • 准备环境变量配置文件
    在你运行Python脚本的同目录下,新建一个纯文本文件,命名为.env(注意Windows系统不要自动加.txt后缀,确保文件名就是.env),文件内写入键值对格式的内容:
    DISCORD_TOKEN=你的Discord机器人完整Token
    
  • 修正代码中获取Token的逻辑
    把原来错误的Token获取行,替换为读取.env文件里定义的DISCORD_TOKEN键对应的值:
    TOKEN = os.getenv('DISCORD_TOKEN')
    
  • 验证加载有效性
    可以在load_dotenv()执行完成后,加一行打印语句检查Token是否正常读取:
    print(TOKEN)
    
    如果打印结果不是None,说明加载成功;如果仍然是None,需要检查.env文件和当前脚本的相对路径是否正确,必要时给load_dotenv()传入明确的文件路径:
    load_dotenv(dotenv_path="./.env")
    

安全提醒:你在提问中直接泄露了自己的完整机器人Token,需要立刻前往Discord开发者平台的机器人设置页重置该Token,否则他人可以直接操控你的机器人。

修正后的可运行代码示例
import os
import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)

内容的提问来源于stack exchange,提问作者Odd's Adventures

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 14:15:04