Исключения примерно в 10000 раз медленнее, чем возвращение кода состояния / ошибки в зависимости от языка программирования. Это происходит из-за отслеживания всей информации стека. Это плохо.
Как правило, вам никогда не нужно использовать исключения. Фактически, в один момент, единственное, что существовало, это коды возврата.
Приятная особенность исключений состоит в том, что они не позволяют программе продолжаться, если с ними не будут обращаться правильно. Вместо этого программа вылетает.
Так что, в основном, если вы забываете об обработке сообщений о состоянии или беспокоитесь о том, что другие могут не проверять коды возврата из ваших функций, исключения останавливают программу и заставляют вас ее исправить. Хотя я видел, как многие неопытные программисты ловили исключение, ничего не делали с этим и затем продолжали. По сути, это то же самое, что игнорирование кода возврата из функции.
Еще одна приятная особенность исключений состоит в том, что они «всплывают» автоматически. Вместо того, чтобы передавать коды ошибок через длинную цепочку функций, вы можете установить свой метод try на самом верхнем уровне и соответствующим образом обработать любую ошибку (при условии, что вы не хотите, чтобы что-то еще происходило между ними). Например, если что-то пойдет не так, отобразите страницу с ошибкой.