Python 如何处理'MissingRequiredArgument'错误

Python 如何处理'MissingRequiredArgument'错误,python,error-handling,discord,discord.py,discord.py-rewrite,Python,Error Handling,Discord,Discord.py,Discord.py Rewrite,我在discord.py的重写分支中制作了一个机器人,假设这是我的代码: @bot.command() async def ok(ctx,con): try: await ctx.send(con) except commands.MissingRequiredArgument: await ctx.send('You did not give me anything to repeat!') 我试图做的是处理MissingRequiredArg

我在discord.py的重写分支中制作了一个机器人,假设这是我的代码:

@bot.command()
async def ok(ctx,con):
    try:
        await ctx.send(con)
    except commands.MissingRequiredArgument:
        await ctx.send('You did not give me anything to repeat!')
我试图做的是处理MissingRequiredArgument错误,但我编写的代码仍然会给出错误,而不是返回
您没有给我任何要重复的内容
Ignoring exception in command translate:
Traceback (most recent call last):
  File "C:\Users\jatinder\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\jatinder\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 790, in invoke
    await self.prepare(ctx)
  File "C:\Users\jatinder\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 751, in prepare
    await self._parse_arguments(ctx)
  File "C:\Users\jatinder\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 679, in _parse_arguments
    kwargs[name] = await self.transform(ctx, param)
  File "C:\Users\jatinder\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 516, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: con is a required argument that is missing.

最好的方法是使用错误事件

@ok.error
async def on_command_error(error, ctx):
    await ctx.send(“You did not give me anything to repeat!”)

请注意
@ok。错误是故意的,因为它只允许该命令运行,而不会干扰您的其他命令。

我不确定其他答案是否有效,但这将有效

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, MissingRequiredArgument):
        await ctx.send("A parameter is missing") 

try/except无法处理此错误,我不确定原因,但我有两种方法可以处理此错误

第一种方法:
@bot.command()
异步def正常(ctx,con=None):
如果con==None:return wait ctx.send('您没有给我任何要重复的内容!')
#在这里做任何事情,如果你来这里,这意味着用户给了重复的东西
默认情况下,“con”设置为“无”(con=None)。如果用户不提供任何东西,它将保持无。但如果用户给出了什么,那就是他给出的。 if语句将检测“con”是否等于None,如果它等于None,则表示用户未返回任何内容

第二种方法
@bot.command()
异步def正常(ctx、con):
#在这里做任何事情,如果你来这里,这意味着用户给了重复的东西
@机器人事件
命令上的异步定义错误(ctx,错误):
如果isinstance(错误,commands.MissingRequiredArgument):
打印(“你没有给我任何重复的内容!”)
我在这里使用了
@bot.event
,这意味着所有没有参数的命令都将处理错误(换句话说,获取
MissingRequiredArgument
错误的命令)
如果您只想使用“ok”命令,那么通过查看discord.py repo本身上写入的异常,可以使用
@ok.error
而不是
@bot.event

,MissingRequiredArgument似乎只是在未传递所需参数时发生的异常,而ctx.send()方法只有一个参数。您是否尝试过在没有任何try/except语句的情况下使用wait ctx.send(con)以及它在出现错误时会说些什么?@lambda23我确实尝试过,但它只是给出了相同的错误。确切的错误是什么(堆栈跟踪)?您可能还希望包括discord.py版本,并检查其GitHub repo上是否存在(正在进行的)问题。@lambda23添加了它,我将检查其githubOne注释中的原始代码。如果con是
None
,您可能只发送不一致消息,而不是以这种方式包装它。最好避免方法抛出错误,而不是让它抛出错误。另外,我认为
con
是第一个参数,而不是命令的参数数组,您可以使用
*args
作为方法的第二个参数。这样,您将使用参数作为数组,可以检查第一个参数(
args[0]
)是否为无,然后发送消息。另外,如果使用
@ok.error
,您可以在命令上命名
\u error
任何您想要的命令都没有“event”属性。所以我认为
@好的。事件
不起作用。也许你的意思是“好的。错误”
?是的,我错了!