使用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是否正常读取:
如果打印结果不是None,说明加载成功;如果仍然是None,需要检查print(TOKEN).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
相关产品推荐
相关产品推荐

