2010-12-11 5 views
1

Есть ли какие-либо негативы, чтобы поймать исключение и просто зарегистрировать его? Это похоже на минимальный минимум для каждого исключения исключений, но на самом деле ничего не делает об исключении.Неправильная ли практика регистрировать исключение только тогда, когда оно поймано?

Я уверен, что это зависит от обстоятельств, например. для исключения, зависящего от пользователя, требуется всплывающее окно и т. д., но что-то на бэкэнд, который пользователь не видит, не делает. Или, может быть, есть нечто большее, чем просто.

+0

"пойман" → "пойман" – nibot

ответ

6

В общем, делайте правильные вещи в каждой данной ситуации. Иногда это означает просто регистрацию исключения. В других случаях вы можете выполнить конкретное целевое восстановление.

Если пользователь попросил вас открыть файл, например, и вы поймаете FileNotFoundException, вам следует сообщить об этом пользователю и предоставить им возможность выбрать другой файл. Или, если синтаксический анализ строки, предоставленной пользователем, вызывает FormatException (хотя для исключения исключений вы часто используете шаблон TryX), попросите пользователя ввести числовую строку.

Часто, самое лучшее, что нужно сделать, это не поймать исключение вообще. Если вы не можете сделать что-то подходящее для этого, позвольте ему перейти к корню стека приложений, где вы можете его зарегистрировать, или часто просто разрешите ему сбой приложения. Если вы не знаете, почему вы видите исключение, действительно ли вы уверены, что ваше приложение здорово и не испортит данные?

0

Исключения могут возникать только в исключительных обстоятельствах, возможно, посмотрите, может ли ваш код быть перезаписан для выполнения проверки перед тем, как выполнить операцию, которая вызывает выброс исключения, и зарегистрировать результат проверки, если он сработает.

Вы должны использовать исключения для отслеживания ошибок/сообщить пользователю, что их вклад является некорректным/там был глюк в матрице

0

Я склонен распространяться исключения до уровня GUI, где они может быть пойман. Очень сложно понять, что исключения пойманы по пути, и у вас нет подсказки, где они произошли (нет трассировки стека).

Когда вы работаете в рамках, вы иногда не можете распространять Исключение из-за ограничений интерфейса. В этом случае я поймаю Exception и постараюсь убедиться, что я предоставляю класс и метод, где это произошло в сообщении журнала.

0

Некоторые исключения указывают на то, что все происходит очень плохо, и приложение должно быть закрыто так же быстро, как практически, чтобы не повредить систему; данные могут быть сохранены в файле восстановления, но не должны перезаписывать первичный файл. Другие исключения указывают на то, что произошла неожиданная, но восстанавливаемая ситуация. Другие указывают, что Microsoft отказалась от метода Try___, который должен был включить в API (например, Control.TryBegininvoke). В прежней ситуации есть исключение было бы очень плохо. В последней ситуации употребление исключения - это самый чистый способ получить рабочий код (обходные пути, необходимые для обеспечения того, чтобы Control.BeginInvoke не выбрасывал, ужасны и могут вызвать больше раздоров, чем проглатывание исключений из BeginInvoke). В средней ситуации обработчик исключений должен исправить ситуацию, чтобы модуль, содержащий ее, мог выполнять свои контракты. Если это можно сделать, нет необходимости распространять исключение дальше.

Смежные вопросы