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