使用异常的情况,用户是否应该能够触发异常?

时间:2009-03-01 13:53:08

标签: exception-handling

使用异常来处理用户生成的错误是否可接受或明智?比如...

    try
    {
        $job->authorise($user);
    }
    catch (InsufficentCreditException $e)
    {
        return E_INSUFFICIENT_CREDIT;
    }
    catch (PermissionDeniedException $e)
    {
        return E_PERMISSION_DENIED;
    }

或仅为更严重的错误保留的例外(如找不到文件,除零)?

2 个答案:

答案 0 :(得分:6)

糟糕的用户输入绝不是例外。这是常态!

但是说真的。例外情况适用于特殊情况,来自外部来源的错误/不正确数据通常不例外。

答案 1 :(得分:0)

如果我理解你的上述用例,我认为'InsufficentCreditException'是一个很好的理由。程序的所有正向流程都可以自上而下处理,正面的任何“例外”都是失败,因此也是例外。

Mitch说,'糟糕的用户输入绝不是例外'而'来自外部来源的错误/不正确的数据通常不是例外',但如果您处于'按合同计划',那就是这种情况。抛出异常比从外部来源收到的无效数据有什么更好的理由?

最后一点,您的问题与您的用例不符。信用不足通常不是由用户生成的错误引起的。明确的因果关系会使这更容易回答。