Ситуации использования исключений, должен ли пользователь вызывать исключения? - PullRequest
0 голосов
/ 01 марта 2009

Допустимо или целесообразно использовать исключения для устранения пользовательских ошибок? Такие как ...

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

или исключения зарезервированы только для более серьезных ошибок (например, файл не найден, деление на ноль)?

Ответы [ 2 ]

6 голосов
/ 01 марта 2009

Плохой пользовательский ввод никогда не является исключением. Это норма!

Серьезно, хотя. Исключения составляют исключительные обстоятельства, и плохие / неверные данные из внешнего источника обычно не являются исключением.

0 голосов
/ 01 марта 2009

Я думаю, что «InsufficentCreditException» является хорошей причиной, чтобы выбросить, если я понимаю ваш сценарий использования выше. Весь положительный поток программы может быть обработан сверху вниз, любое «исключение» из положительного - неудача и, следовательно, исключение.

Митч говорит, что «плохой пользовательский ввод никогда не является исключением», а «плохие / неверные данные из внешнего источника обычно не являются исключением», но если вы работаете с «программой по контракту», это именно тот случай. Что может быть лучше, чем выбрасывать исключение, чем неверные данные, полученные из внешнего источника?

Последнее замечание: ваш вопрос и ваш вариант использования не совпадают. Недостаточный кредит обычно не вызван ошибкой, созданной пользователем. Четкое объяснение причины / следствия облегчило бы ответ.

...