Глотать исключения - опасная практика, потому что:
- Это может заставить пользователя думать, что что-то удалось, когда это действительно не удалось.
- Это может привести ваше приложение в состояние, которое вы не планировали.
- Это усложняет отладку, поскольку гораздо сложнее выяснить, где произошла ошибка, когда вы имеете дело со странным / неработающим поведением, а не с трассировкой стека.
Как вы, вероятно, можете себе представить, некоторые из этих результатов могут быть крайне катастрофическими , поэтому правильное выполнение этих правил - важный навык.
Лучшая практика
Прежде всего, используйте защитный код, чтобы исключения возникали не более, чем необходимо. Они вычислительно дорогие.
Обрабатывайте ожидаемые исключения на уровне детализации (например: FileNotFoundException
), когда это возможно.
Для непредвиденных исключений вы можете сделать одну из двух вещей:
- Пусть они всплывают нормально и вызывают сбой
- Поймай их и грациозно провалишься
Изящно провал?
Допустим, вы работаете в ASP.Net и не хотите показывать желтый экран смерти своим пользователям, но также не хотите, чтобы проблемы были скрыты от команды разработчиков.
В наших приложениях мы обычно отлавливаем необработанные исключения в global.asax
, а затем регистрируем и отправляем уведомления по электронной почте. Мы также показываем более дружественную страницу ошибок, которую можно настроить в web.config
с помощью тега customErrors
.
Это наша последняя линия защиты, и если мы получим электронное письмо, мы сразу же начнем.
Этот тип шаблона не аналогичен простому проглатыванию исключений, когда у вас есть пустой блок Catch, который существует только для «притворства», что исключение не произошло.
Другие заметки
В VS2010 появилось нечто, называемое intellitrace, которое позволит вам отправлять по электронной почте информацию о состоянии приложения домой и просматривать код, проверять значения переменных во время исключения и так далее. Это будет чрезвычайно полезно.