Je faisais un bot dans la branche de réécriture de discord.py et disons que c'est mon code:
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.
Ce que j'essaie de faire est de gérer l'erreur MissingRequiredArgument mais le code est écrit donne toujours l'erreur au lieu de renvoyer Vous ne m'avez rien donné à répéter!
J'apprécierais que quelqu'un me dise comment le gérer.
erreur exacte:
@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!')
3 Réponses :
La meilleure façon de procéder serait d'utiliser l'événement d'erreur.
@ok.error async def on_command_error(error, ctx): await ctx.send(âYou did not give me anything to repeat!â)
Veuillez noter que @ ok.error
est intentionnel car il ne l'autorise qu'à fonction pour cette commande afin de ne pas interférer avec toutes les autres commandes que vous avez.
Les commandes n'ont pas l'attribut «événement». Je pense donc que @ ok.event
ne fonctionnera pas. Peut-être vouliez-vous dire @ ok.error
?
Je l'ai fait, mon erreur!
Je ne suis pas sûr que l'autre réponse fonctionnera, mais cela fonctionnera
@bot.event async def on_command_error(ctx, error): if isinstance(error, MissingRequiredArgument): await ctx.send("A parameter is missing")
Cette erreur ne peut pas être gérée par un try / sauf, je ne sais pas pourquoi, mais j'ai deux façons de gérer cela.
@bot.command() async def ok(ctx, con): # Do whatever here, if you come here it means the user gave something to repeat @bot.event async def on_command_error(ctx, error): if isinstance(error, commands.MissingRequiredArgument): print('You did not give me anything to repeat!')
De plus, si vous utilisez @ ok.error
, vous pouvez nommer on_command_error
ce que vous voulez
En regardant l'exception écrite sur le dépôt discord.py lui-même, il semble que MissingRequiredArgument n'est qu'une exception qui se produit lorsque vous ne passez pas l'argument requis, et la méthode ctx.send () a un argument. Avez-vous essayé d'utiliser await ctx.send (con) sans aucune instruction try / except et ce qu'elle dit en cas d'erreur?
@ lambda23 Je l'ai essayé mais il a juste donné la même erreur
Quelle est l'erreur exacte (trace de pile)? Vous pouvez également inclure la version discord.py et vérifier s'il s'agit d'un problème (en cours) sur leur dépôt GitHub.
@ lambda23 l'a ajouté et je vais vérifier leur github
Une note de votre code d'origine. Vous pouvez probablement simplement envoyer le message Discord si con est un
None
au lieu de l'envelopper de cette manière. Il vaut mieux éviter que la méthode renvoie une erreur au lieu de la laisser lancer une erreur. De plus, je pense quecon
est le premier argument au lieu du tableau d'arguments de la commande, vous pouvez utiliser* args
comme deuxième paramètre de votre méthode. De cette façon, vous utiliserez vos arguments comme un tableau et vous pourrez vérifier si votre premier argument (args [0]
) est None, puis vous enverrez le message.