Автор оригинала: [VS]
Тем что если в блок try/catch помещать несколько вызовов функций, то не знаешь откуда именно пришла ошибка, другими словами для грамотной обработки обычно приходится писать try/catch чуть-ли не вокруг каждого вызова функции.
А классы исключений на что?
Перехватываешь нужный тебе класс в нужном месте.
Ну уж если у тебя все функции одно и тоже исключение бросают то тогда конечно придется тебе как-то иначе определять в чем проблема. Добавляешь к классу исключения код ошибки например.
После этого не понятно, зачем вообще нужно try/catch когда можно просто возвращать true/false из функции, и устанавливать в обьекте класса функции флаги с описанием ошибки.
Представь что ошибка чтения из файла произошла у тебя в методе, который вызывается методом который вызывает лично твой метод. И представь что тебе надо по разному реагировать в разных ситуациях на данную ситуацию, когда-то игнорировать, когда-то аборт делать, когда-то что еще. Как ты все это сделаешь при помощи простого true - false? Нет конечно извратиться можно, но насколько это будет удобно?
И накой мне из функции всегда что-то возвращать если по идее ей этого не нужно? Ну чисто функциональная у нее обязанность.