TypeError:invoke()接受2个位置参数,但给出了3个

时间:2020-10-12 05:35:29

标签: python discord.py

我遇到了一个问题,我不知道此错误试图告诉我什么。

这是代码

@client.command()
async def lofi(ctx):
    await customplay.invoke(ctx, 'https://discord.com/channels/630231925860204556/661802160605888531/753484931547791390')
    await ctx.send('Playing Discord Lofi Mix, by Discord on YouTube!')

And here's the error get.

提前谢谢! -Roke Madoki

1 个答案:

答案 0 :(得分:0)

表达式:

customplay.invoke(oneThing, anotherThing)

将通过参数invokecustomplaycustomplay调用任何oneThing类的anotherThing方法。 customplay自动添加到对象调用中,通常以self的形式接收,因此您可以知道要在哪个对象上进行操作。

此问题的一个很常见的原因是忘记接收此参数,该操作可能会执行如下操作:

class CustomPlay:
    def invoke(self, thing):
        weaveYourMagic()

customPlay = CustomPlay()
result = customplay.invoke(42) # self param added automagically

另一种可能性与您在 second 行上使用ctx的方式有关。该变量名通常是指上下文(通常类似于self),很可能就是您想使用的变量。

因此您可以尝试将第一行替换为:

await ctx.invoke('https://discord.com/channels/bigHexNumber')

以使其与第二种形式匹配。

如果您犯了错误(请在范围堆栈中进一步引用customplay变量,并将其作为ctx传递,而不是仅使用{ {1}}传入),则可以有效地调用函数的两个副本。

我是说您可能正在按照以下方式做某事:

ctx

现在我无法从代码中分辨出是哪一个(或者即使是完全不同的东西),但是这两个是其中之一,可能后者。