Вопрос слишком широкий, чтобы дать полный ответ, но позвольте мне высказать свое мнение по этому вопросу.
try-catch-finally
блоки не используются для обработки необработанных исключений. Естественно, что случаи, о которых вы никогда не задумывались, останутся необработанными, и вы не должны молчать о них, но вы должны позволить им выразить себя, чтобы вы думали о них. Обрабатываемые исключения - это случаи, которые не находятся в руках программиста, но он / она думает о них. Например, пользовательский ввод - это строка вместо числа.
Если вы думали, что это ваш случай, то всегда проверяйте с помощью if
s. Например, если что-то может быть нулевым. Try-catch действительно дорогостоящий, и никакой логики в них не нужно обрабатывать.
Использование глобального обработчика исключений, с другой стороны, является точным опосситом. Это не обернуть все мыслимые случаи и показать один ответ пользователю. Вы должны регистрировать неизвестные исключения, чтобы вернуться и подумать о том, почему они произошли, и тем временем сказать, что вы сожалеете о пользователе. :)