Python Discord Bot本地正常运行,服务器部署报NoneType错误求助
排查思路与解决方案
核心原因分析
报错TypeError: object NoneType can't be used in 'await' expression的关键在于:你在await一个同步方法的返回值(None)。Discord.py不同版本中bot.add_cog()的定义存在差异:
- v2.0+版本:
add_cog是异步方法,必须搭配await使用 - v1.x版本:
add_cog是同步方法,不能加await
本地正常但服务器报错,大概率是服务器上的discord.py版本与本地不一致——你本地用的是v2.x,服务器装的是v1.x,导致同步方法被await,触发该错误。
分步排查与解决
1. 对齐discord.py版本
- 本地执行命令查看版本:
pip show discord.py - 服务器执行同样命令对比版本,若不一致,强制安装和本地相同的版本:
pip install discord.py==[你的本地版本号]
2. 验证Cog实例化有效性
确保admin.Admin(botlogger, bot, client)能正常生成实例,不会返回None:
- 检查
botlogger在服务器上的初始化状态(比如日志文件路径是否存在、服务器是否有写入权限) - 检查
client对象在服务器环境中是否为None(比如依赖的其他服务是否未启动) - 在实例化代码前添加调试输出,确认参数和实例的有效性:
print(f"botlogger类型: {type(botlogger)}, bot类型: {type(bot)}, client类型: {type(client)}") admin_cog = admin.Admin(botlogger, bot, client) print(f"Admin实例类型: {type(admin_cog)}") # 确认输出不是<class 'NoneType'> await bot.add_cog(admin_cog)
3. 改用官方推荐的Cog加载方式
使用load_extension加载Cog,避免手动实例化的潜在问题:
- 在
admin.py中添加标准setup函数(需提前将botlogger和client挂载到bot对象上,比如bot.logger = botlogger):from discord.ext import commands class Admin(commands.Cog): def __init__(self, bot): self.bot = bot self.logger = bot.logger self.client = bot.client def setup(bot): bot.add_cog(Admin(bot)) - 在主文件中加载扩展(注意版本差异:v2.x用异步的
await bot.load_extension,v1.x用同步的bot.load_extension):# 确保botlogger和client已挂载到bot后执行 await bot.load_extension("admin")
4. 确保服务器依赖完全一致
- 本地生成依赖清单:
pip freeze > requirements.txt - 服务器安装清单内的依赖:
pip install -r requirements.txt - 统一服务器Python版本为3.10.7,避免小版本差异导致的隐性问题
内容的提问来源于stack exchange,提问作者HowsThat Papi
相关产品推荐
相关产品推荐

