如何解决Discord机器人的AttributeError: 'NoneType'无strip属性问题
解决Discord Bot启动时的
AttributeError: 'NoneType' object has no attribute 'strip' 嘿,我来帮你搞定这个问题!这个报错的根源很明确:你传给client.run()的是None,而Discord的库尝试对这个None调用strip()方法,自然就触发了错误。
看你的代码和回溯信息,问题出在环境变量的读取上:你的代码里写的是client.run(os.getenv('discord api')),但回溯里显示你实际传入的是os.getenv('NzkzNzczNDUwODQ5NDE5Mjk2.X-xJIg.MoKUA7czhrWtFvu4FEc6M3JAQQM')——你把Bot的token本身当成了环境变量的名字,这肯定找不到对应的环境变量,所以os.getenv()返回了None。
给你几个可行的解决方案:
方案1:正确使用环境变量(推荐)
这是最安全的做法,能避免token泄露:
- 先在你的系统里设置一个环境变量,比如叫
DISCORD_BOT_TOKEN,把你的Bot token作为它的值:- Windows:打开命令提示符,输入
setx DISCORD_BOT_TOKEN "你的完整token",然后重启你的代码编辑器/命令行窗口。 - macOS/Linux:在终端里输入
export DISCORD_BOT_TOKEN="你的完整token",如果想永久生效,就把这行添加到~/.bashrc或~/.zshrc文件里。
- Windows:打开命令提示符,输入
- 然后修改代码里的
client.run行:
client.run(os.getenv('DISCORD_BOT_TOKEN'))
方案2:直接传入token(仅测试用)
如果你只是临时测试,不想折腾环境变量,可以直接把token字符串传进去,但千万不要把这个代码上传到GitHub之类的公共仓库,不然你的Bot会被别人盗用:
client.run("NzkzNzczNDUwODQ5NDE5Mjk2.X-xJIg.MoKUA7czhrWtFvu4FEc6M3JAQQM")
额外提醒
如果你的discord.py版本是2.x及以上,别忘了开启消息内容意图,不然你的on_message事件可能不会触发:
import discord import os # 添加这两行开启意图 intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('$hello'): await message.channel.send('Hello!') client.run(os.getenv('DISCORD_BOT_TOKEN')) # 或者直接传token
内容的提问来源于stack exchange,提问作者Woaby
相关产品推荐
相关产品推荐

