Discord.NET - 获取命令中抛出了哪种类型的异常

Posted

技术标签:

【中文标题】Discord.NET - 获取命令中抛出了哪种类型的异常【英文标题】:Discord.NET - Get Which Type of Exception was Thrown in Command 【发布时间】:2018-10-11 00:09:35 【问题描述】:

我认为如果说一个人没有正确的权限来运行命令,或者有冷却时间,或者其他什么,而不是仅仅处理每一个... ...时间。所以我做了自己的异常,但问题是,CommandService.ExecuteAsync().Error 只返回 CommandError.Exception,没有办法(据我所知)找出引发了哪种类型的异常。

我的代码如下:

try  var result = await _service.ExecuteAsync(context, argPos);

            if (!result.IsSuccess)
                switch (result.Error)
                
                    case CommandError.BadArgCount:
                        await context.Channel.SendMessageAsync("Bad argument count.");
                        break;
                    case CommandError.UnknownCommand:
                        break;
                    case CommandError.Exception:
                        // This is what happens instead of the catch block.
                        break;
                    default:
                        await context.Channel.SendMessageAsync($"You ???????? Broke ???????? It (result.ErrorReason)");
                        break;

                
        
        catch (Exceptions.GameCommandNotReadyException e)
        
            // The code never gets here because of the CommandError.Exception
        

【问题讨论】:

【参考方案1】:

您可能不想在那里使用 try/catch,因为您会不必要地抛出自己的异常,然后直接捕获它。您可以将错误处理放入case CommandError.Exception

如果您想详细了解导致错误的异常:

由于您正在调用ExecuteAsync 函数,因此“结果”很可能不仅是IResult 类型,而且是ExecuteResult 类型。这意味着有一个属性“异常”存储“出了什么问题”。

case CommandError.Exception:
    if (result is ExecuteResult execResult)
    
        //you can now access execResult.Exception to see what happened
    

break;

【讨论】:

以上是关于Discord.NET - 获取命令中抛出了哪种类型的异常的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Angular 单元测试错误:“在 afterAll\n[object ErrorEvent] 中抛出了一个错误”

测试 Mocha 中抛出的错误 [重复]

php的异常处理,一个try代码块中抛出了多个异常,怎么全都捕获,并输出来?下面的代码为只输出一个异常?

自定义管理命令在虚拟环境中抛出未找到模块错误

为啥 nodemon 在终端中抛出一些错误?

获取在 ExceptionMapper 中抛出异常的方法的 @Produces 注释