SyntaxError:位置参数跟在关键字参数[discord.py]后面

2024-04-29 16:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

async def tracklooper(ctx, timesPlayedTrack):
    voice = get(bot.voice_clients, guild=ctx.guild)
    if (timesPlayedTrack <= totaltime):
        if voice and voice.is_playing():
            voice.stop()
            print(str(timesPlayedTrack))
            run_coroutine_threadsafe(msg.edit(content="Playing "+vTT+" for "+str(timesPlayedTrack)+" time/s"), bot.loop)
            voice.play(discord.FFmpegPCMAudio(audio), after=lambda e: asyncio.run_coroutine_threadsafe(tracklooper(ctx, timesPlayedTrack+1)), bot.loop)
            voice.is_playing()
    else:
        run_coroutine_threadsafe(msg.delete(), bot.loop)
        run_coroutine_threadsafe(ctx.send("Finished playing "+vTT+" for "+str(totaltime)+" times"), bot.loop)
        run_coroutine_threadsafe(looptrack_set_times.delete(), bot.loop)
        run_coroutine_threadsafe(ply.delete(), bot.loop)

这就是错误:

voice.play(discord.FFmpegPCMAudio(audio), after=lambda e: asyncio.run_coroutine_threadsafe(tracklooper(ctx, timesPlayedTrack+1)), bot.loop)
                                                                                                                                      ^
SyntaxError: positional argument follows keyword argument

我对python语言不是很熟悉,所以我很难找到修复方法


Tags: runloopifbotdeletectxvoicestr
1条回答
网友
1楼 · 发布于 2024-04-29 16:28:51

在您的例子中,关键字参数after=lambda...应该始终放在函数调用的末尾。您已将bot.loop放在末尾,这不是一个关键字参数

查看API文档,VoiceClient.play的唯一参数是sourceafter,因此您应该删除bot.loop,因为您已经提供了这两个参数

相关问题 更多 >