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

Exception handling 在使用异常的情况下,用户是否应该能够触发异常?,exception-handling,Exception Handling,使用异常处理用户生成的错误是否可以接受或合理?比如 try { $job->authorise($user); } catch (InsufficentCreditException $e) { return E_INSUFFICIENT_CREDIT; } catch (PermissionDeniedException $e) { return E_PERMISSION_DE

使用异常处理用户生成的错误是否可以接受或合理?比如

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

或者,是否只为更严重的错误保留异常(如未找到文件、被零除)?

错误的用户输入永远不会是异常。这是常态


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

错误的用户输入从来都不是例外。这是常态


说真的。异常是针对异常情况的,来自外部源的错误/不正确数据通常不是异常。

如果我理解上面的用例,我认为“InsufficentCreditException”是抛出异常的好理由。程序的所有正向流都可以自上而下处理,任何正向的“异常”都是失败的,因此是异常

Mitch说,“错误的用户输入从来都不是例外”,“来自外部源的错误/不正确数据通常不是例外”,但如果你是“按合同编程”,情况正是如此。除了从外部源接收无效数据外,还有什么更好的理由引发异常


最后一点,您的问题和您的用例不匹配。信用不足通常不是由用户生成的错误引起的。一个清晰的因果案例将使回答更容易。

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

Mitch说,“错误的用户输入从来都不是例外”,“来自外部源的错误/不正确数据通常不是例外”,但如果你是“按合同编程”,情况正是如此。除了从外部源接收无效数据外,还有什么更好的理由引发异常

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