Python调用自定义async函数报错缺少parachannel必填位置参数怎么解决
报错触发原因
- 你定义的
find函数要求传入3个必选位置参数:ctx、user、parachannel,但实际调用时仅传入了user和频道ID两个参数,缺失第一个参数ctx,因此Python抛出缺少必填参数parachannel的类型错误。 - 额外问题:
find是异步函数,直接同步调用无法获取返回值,只会得到协程对象,必须配合await关键字调用。
修复方案
首先观察到你的find函数内部完全没有用到ctx参数,最优修复方式是直接删除函数定义中没用的ctx参数,同时调用时添加await关键字:
# 修正后的函数定义:删除无用的ctx参数 async def find(user, parachannel): user = int(user) parachannel = int(parachannel) funchannel = bot.get_channel(parachannel) fun_guild = bot.get_guild(880108797820026881) memberuser = fun_guild.get_member(user) fun_calc = 0 async for message in funchannel.history(limit=10): if message.author == memberuser: fun_calc = fun_calc + 1 return fun_calc # 修正后的调用代码:添加await关键字 gen_calc = await find(user, 880123663318409277) print(gen_calc)
如果你需要保留ctx参数,只需要在调用时传入当前命令的ctx对象即可,调用代码修改为:
gen_calc = await find(ctx, user, 880123663318409277)
内容的提问来源于stack exchange,提问作者Mushtaq Mahar
相关产品推荐
相关产品推荐

