如何修复Python Discord Bot报错:'NoneType'对象无'strip'属性
报错根因
从报错栈可以直接定位到两个核心问题:
- 环境变量读取失败,
os.getenv('DISCORD_TOKEN')返回了None,Discord库尝试对空值调用strip方法触发报错 on_message回调未添加@client.event装饰器,即使登录成功也无法响应用户消息
分步解决方案
1. 修复环境变量读取问题
- 确认项目根目录下存在
.env文件,文件名仅为.env,不要带.txt等后缀 - 打开
.env文件,确保内容格式为DISCORD_TOKEN=你的机器人令牌,等号两侧不要加多余空格,令牌前后不要加引号 - 可在读取环境变量后添加校验逻辑,提前识别配置问题:
load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') # 新增校验逻辑 if not TOKEN: raise ValueError("未读取到DISCORD_TOKEN,请检查.env文件配置")
2. 修复消息回调注册问题
给on_message函数添加@client.event装饰器,让客户端注册这个事件回调:
@client.event # 补充该装饰器 async def on_message(message): if message.author == client.user: return if message.content.startswith('$hello'): await message.channel.send('Hello!')
3. 优化代码冗余部分
你已经将读取到的TOKEN存入了变量,client.run直接调用变量即可,不需要重复读取环境变量:
将client.run(os.getenv('DISCORD_TOKEN'))修改为client.run(TOKEN)
4. 高版本discord.py适配(v2.0及以上)
如果使用的是最新版discord.py,需要显式声明消息读取意图,否则无法正常接收消息内容:
- 初始化Client时添加意图配置:
intents = discord.Intents.default() intents.message_content = True # 开启消息内容读取权限 client = discord.Client(intents=intents)
- 前往Discord开发者后台的Bot设置页面,打开「Message Content Intent」开关。
内容的提问来源于stack exchange,提问作者KodyN
相关产品推荐
相关产品推荐

