Python блок try except запускает код except, когда я не ожидаю проблемы, и просто выдает ошибку, когда я ожидаю, что он запустит код except - PullRequest
0 голосов
/ 03 августа 2020

Я работаю над ботом Discord в python, который поздравит sh людей с днем ​​рождения. Я планирую, чтобы пользователи сообщали свои дни рождения боту с помощью команды, чтобы он мог сохранить их в текстовом файле. Это код на данный момент:

@bot.command(pass_context=True)
async def birthday(ctx,arg1,arg2,arg3,arg4):
    try:
        if (ctx.user == bot.user):
            return
        print(arg1 + ', ' + str(arg2) + ', ' + str(arg3) + ', ' + str(arg4))
    except:
        channel = bot.get_channel(channel_id)
        await channel.send('Oops! I didn\'t get that. Please try again using this format:\n!birthday Garfield 19 6 1978')

По сути, он должен распечатать полученную информацию, если она правильно отформатирована, и предупредить пользователя о проблеме, если это не так. Это сообщение об ошибке, которое я получаю:

Ignoring exception in command birthday:
Traceback (most recent call last):
  File "/home/valerie/.local/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "/home/valerie/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 790, in invoke
    await self.prepare(ctx)
  File "/home/valerie/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 751, in prepare
    await self._parse_arguments(ctx)
  File "/home/valerie/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 670, in _parse_arguments
    transformed = await self.transform(ctx, param)
  File "/home/valerie/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 516, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: arg4 is a required argument that is missing.

Почему возникает исключение, когда все должно работать нормально, и даже не запускать код except, когда действительно есть проблема? Есть ли способ исправить это?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Это общий комментарий, но он слишком велик, чтобы поместиться в комментариях ... (так что, пожалуйста, игнорируйте, как считаете нужным)

Вы можете сгруппировать свои аргументы и использовать ", ".join(), чтобы ваш код немного чище:

@bot.command(pass_context=True)
async def birthday(ctx, *args):
    try:
        if (ctx.user == bot.user):
            return
        print(", ".join(args))
    except:
        ...
0 голосов
/ 03 августа 2020

Где-то в вашем коде вы вызываете функцию дня рождения, которая ожидает 5 аргументов. Вы не предоставляете необходимое количество аргументов. Вот почему код не работает.

Если вы прочитаете последнюю строку исключения, вы увидите, что ошибка явно обозначена.

discord.ext.commands.errors.MissingRequiredArgument: arg4 is a required argument that is missing.

Вам нужно предоставить arg4, который вы не предоставляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...