Игнорирование исключений, возникающих в блоке 'finally', обычно является плохой идеей , если только вы не знаете, какими будут эти исключения и какие условия они будут представлять. В обычном шаблоне использования try/finally
блок try
переводит вещи в состояние, которого не ожидает внешний код, а блок finally
восстанавливает состояние этих вещей до того, что ожидает внешний код. Внешний код, который перехватывает исключение, обычно ожидает, что, несмотря на исключение, все было восстановлено до состояния normal
. Например, предположим, что некоторый код запускает транзакцию, а затем пытается добавить две записи; блок finally выполняет операцию «откат, если не зафиксировано». Вызывающий может быть подготовлен к возникновению исключения во время выполнения второй операции добавления и может ожидать, что, если он поймает такое исключение, база данных будет в том состоянии, в котором она находилась до того, как была предпринята любая операция. Однако, если во время отката возникает второе исключение, могут произойти плохие вещи, если вызывающая сторона делает какие-либо предположения о состоянии базы данных. Ошибка отката представляет собой крупный кризис - тот, который не должен быть обнаружен кодом, ожидающим простого исключения «Не удалось добавить запись».
Моя личная склонность заключалась бы в том, чтобы метод finally перехватывал возникающие исключения и заключал их в «CleanupFailedException», признавая, что такой сбой представляет собой серьезную проблему, и такое исключение не следует легко отлавливать.