Есть такое правило, не помню откуда. Про различие исключений и корректных ситуаций, которые должны быть обработаны без исключений.
"Уберите все исключения из своего кода. Если он продолжает работать как раньше — значит, исключения используются по назначению"
То есть, в логику программы нельзя их встраивать. Иначе, убрав исключения, мы меняем поведение программы.