Ігнорування винятків, які трапляються в блоці "нарешті", як правило, погана ідея, якщо тільки не відомо, якими будуть ці винятки та які умови вони представлятимуть. У звичайній try/finally
схемі використання try
блок переводить речі в стан, зовнішній код якого не очікується, і finally
блок відновлює стан цих речей до того, що очікує зовнішній код. Поза зовнішнім кодом, який фіксує виняток, як правило, очікується, що, незважаючи на виняток, все було відновлено до аnormal
держава. Наприклад, припустимо, що якийсь код починає транзакцію, а потім намагається додати два записи; блок "нарешті" виконує операцію "відкат, якщо не здійснено". Абонент може бути готовий до винятку, який відбудеться під час виконання другої операції "додавання", і може очікувати, що якщо він виловить такий виняток, база даних буде в стані, в якому вона була до спроби будь-якої операції. Якщо ж під час відкату трапляється другий виняток, можуть трапитися погані випадки, якщо абонент зробить якісь припущення щодо стану бази даних. Відмова відката представляє собою велику кризу - ту, яку не слід сприймати за кодом, очікуючи простого виключення "Не вдалося додати запис".
Моя особиста схильність полягала б у тому, щоб остаточно вилучити винятки з методу, які трапляються, і загорнути їх у "CleanupFailedException", визнаючи, що такий збій є головною проблемою, і такий виняток не слід сприймати легко.