Правильной логике обработки исключений можно посвятить целую книгу, и есть разыне практики их применения. Например в JAVA распространен принцип - логика на эксепшенах. Но в .NET - нет, в первую очередь из-за проблем производительности. Но в любом случае - обрабатывать исключения надо.
Тут следует уточнить, что я не призываю писать код на обработке исключений - я за адекватную обработку исключений. То есть я против стиля проверки result-code, как в c++, или переменной error, как в Node.js. Я за использование try-catch