Что касается вопроса о перехвате исключения в области действия функции, в которую оно было брошено (т. Е. В функции init()
), то редко имеет смысл перехватывать исключение в области действия, в которую оно было брошено. По сути это будет означать, что вы обнаружили ошибку и знаете, как ее обработать (и собираетесь ее обрабатывать), но вы используете исключение, чтобы выполнить не что иное, как передачу управления другой части вашей функции. .
Хотя могут быть случаи, когда это может иметь смысл (хотя это может быть запах кода, указывающий на то, что функция достаточно сложна, чтобы ее можно было реорганизовать), логика обработки этой ошибки (поскольку она равна обрабатываются) должны использовать более распространенные методы потока управления, такие как if
операторы или break
. Даже крайне непопулярный goto
может быть предпочтительнее, чем выбрасывать исключение, только если оно обрабатывается в той же функции.