Я обычно обращаюсь со всем, что возможно, как можно более локально, и подавляющее большинство исключений ожидаются и восстанавливаются в моем опыте. Иногда локально не должно означать один и тот же метод, и нечего стыдиться выбросить исключение из метода, где оно не может быть обработано.
Кроме того, я обычно определяю уровень в программе, где я хочу обработать исключения, которые я не мог обработать в другом месте. Это может быть верхний уровень или где-то в середине текущего стека, где может быть выполнено частичное восстановление.
Обычно эта обработка просто включает запись непредвиденного исключения и корректное закрытие приложения (в случае неинтерактивных приложений) или завершение текущего потока выполнения в более интерактивных приложениях.
Способ обработки этого исключения сильно зависит от приложения, но вы всегда должны начинать с всеобъемлющего на своем верхнем уровне, который будет регистрировать исключения и ошибки, независимо от того, что затем написать дополнительные обработчики в областях вашего приложения, где могут быть исключения возмещена.
Однако вы никогда не должны пытаться восстанавливаться после ошибки, но вы все равно можете перехватить их (отдельно) в целях постепенного отключения (хотя в случае ошибок это не гарантируется).