RuntimeWarning:协程“Messageable.send”从未等待 python.py

Posted

技术标签:

【中文标题】RuntimeWarning:协程“Messageable.send”从未等待 python.py【英文标题】:RuntimeWarning: coroutine 'Messageable.send' was never awaited python.py 【发布时间】:2022-01-20 22:07:09 【问题描述】:

我有一个 discord.py Python 脚本,但它不发送消息并出现此错误:

RuntimeWarning: coroutine 'Messageable.send' was never awaited

我的代码:

@client.command()
async def shift(ctx, time=None, shifts=None):
    if time is None:
        f=open('times.json')
        lines=f.readlines()
        print(lines[1])
        print(lines[2])
        embed=discord.Embed(title="Shift Infos für diesen Tag")
        embed.add_field(name="Zeit", value=f"time", inline=False)
        embed.add_field(name="Shift", value=f"shifts", inline=False)
        embed.add_field(name="Game", value="https://web.roblox.com/games/8063846199/VWS-Verkehrsbetriebe-Beta", inline=False)
        await ctx.send(embed=embed)
    else:
        if shift is None:
            ctx.send("Bitte gebe ein ob heute eine Shift ist. (Ja oder Nein)")
        else:
            ctx.send(f"Neue Shift Einstellung: Zeit: time shifts")
            with open('times.json', 'a') as the_file:
                the_file.write(f'time\n')
                the_file.write(f'shifts')

【问题讨论】:

【参考方案1】:

您的错误消息已经告诉您解决方案。send 是异步的,因此您必须await 它,就像您发送嵌入时一样。

else:
    if shift is None:
        await ctx.send("Bitte gebe ein ob heute eine Shift ist. (Ja oder Nein)")
    else:
        await ctx.send(f"Neue Shift Einstellung: Zeit: time shifts")

https://discordpy.readthedocs.io/en/master/api.html?highlight=send#discord.abc.Messageable.send

还有一个不相关的说明:您打开文件但从不在第一个 if 块中关闭它。考虑使用上下文管理器,就像您在上一个 else 块中所做的那样。

【讨论】:

【参考方案2】:
@client.command()
async def shift(ctx, time=None, shifts=None):
    if time is None:
        f=open('times.json')
        lines=f.readlines()
        print(lines[1])
        print(lines[2])
        embed=discord.Embed(title="Shift Infos für diesen Tag")
        embed.add_field(name="Zeit", value=f"time", inline=False)
        embed.add_field(name="Shift", value=f"shifts", inline=False)
        embed.add_field(name="Game", value="https://web.roblox.com/games/8063846199/VWS-Verkehrsbetriebe-Beta", inline=False)
        await ctx.send(embed=embed)
    else:
        if shift is None:
            await ctx.send("Bitte gebe ein ob heute eine Shift ist. (Ja oder Nein)")
        else:
            await ctx.send(f"Neue Shift Einstellung: Zeit: time shifts")

            with open('times.json', 'a') as the_file:
                the_file.write(f'time\n')
                the_file.write(f'shifts')

【讨论】:

以上是关于RuntimeWarning:协程“Messageable.send”从未等待 python.py的主要内容,如果未能解决你的问题,请参考以下文章

Tornado websocket 客户端:如何异步 on_message? (从未等待协程)

如何修复'RuntimeWarning:在 double_scalars 中遇到的除以零'

Pycharm 更新到 2016.2 后导入 RuntimeWarning

Django 中 DateField 的 RuntimeWarning

RuntimeWarning:DateTimeField 收到一个天真的日期时间,具有正确的时区和设置

RuntimeWarning:在除法中遇到无效值