Поместите пробную версию, где вы уверены, что не просто проглотите исключение. Несколько блоков try-catch в разных слоях могут быть в порядке, если вы можете обеспечить согласованность.
Например, вы можете поместить try-catch в слой доступа к данным, чтобы обеспечить правильную очистку соединений. Но так как вы не можете сделать гораздо больше, вы, вероятно, должны отбросить исключение.
Переходя на бизнес-уровень, вы можете использовать try-catch для нескольких операций с базами данных, которые вы хотите выполнить атомарно. В этом случае, возможно, вам следует откатить все или привести все в согласованное состояние, где-то записать исключение. Глотание или повторное бросание должно решаться в каждом конкретном случае.
Ваш уровень представления должен всегда отлавливать все исключения, будь то какое-либо веб-приложение, скрипт, выполняемый в браузере, или какое-либо приложение с расширенными возможностями клиента. Возможно, вы не сможете полностью понять исключение, но, по крайней мере, вы можете убедиться, что ваше приложение не умирает перед лицом пользователя.
Конечно, это всего лишь совет. YMMV. :)