Поймать исключение, подтвердить ввод или оба? - PullRequest
5 голосов
/ 03 июня 2011

Я работаю над получением RSS-каналов следующим образом:

SyndicationFeed rss = SyndicationFeed.Load(XmlReader.Create(textBox1.Text));

XmlReader.Create() в этом случае может выдать до 4 исключений, связанных с такими вещами, как нулевой параметр, ошибка 404 и т. Д.

Должен ли я попытаться проверить Uri (убедитесь, что он не нулевой, 404, правильный тип документа и т. Д.), Прежде чем я вызову эту строку, или я должен просто обработать исключения?Я знаю, что много раз читал о SO, что исключения должны использоваться для действительно исключительных обстоятельств, и я согласен, что это не соответствует этому предварительному условию, но кажется, что проще обрабатывать исключения.

Ответы [ 4 ]

4 голосов
/ 03 июня 2011

Свойство Text флажка никогда не равно нулю, поэтому вы можете пропустить его. Проверяйте вручную все простые случаи, не связанные с процессом, такие как пустая строка и правильность URL-адреса, и оставьте более неясные специфичные для XML данные для проверки внутри метода Create. Поэтому ответ состоит в том, чтобы объединить оба.

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

0 голосов
/ 03 июня 2011

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

Если я хочу быть философским, я бы сказал: «Если вы ничего не можете сделать с этой проблемой, нене пытайтесь справиться с этим. "Например, если вы хотите что-то записать в файл, проверить наличие файла, права доступа к файлу и т. Д. Может быть хлопотно, и вы не сможете с этим ничего поделать, если, например, у вас нет доступа к сетевому диску.Если вы поймаете исключение, говорящее «Убедитесь, что файл существует и у вас есть соответствующие разрешения.», Вы избавите себя от многих проблем.

0 голосов
/ 03 июня 2011

Я с нетерпением жду возможности услышать, что другие люди скажут здесь, но мне кажется, что вы должны выполнить тот тип проверок, который, как вы знаете, вы можете точно выполнить: проверить нулевой URI, проверить полностью пустой URI и т. Д.Помимо этого, пусть вызов Create обрабатывает подтверждение, и вы перехватываете исключения.Я предполагаю, что авторы этой функции знают, как проверить ее более тщательно, чем вы (без обид!).

0 голосов
/ 03 июня 2011

Поскольку читатель и интерпретатор канала синдикации будут проверять входные данные, нет необходимости дублировать это усилие.Это особенно верно, поскольку - чтобы сделать это правильно - вам придется принять или отклонить точно такие же документы.Это было бы сумасшедшим дублированием кода.

Я рекомендую просто обработать исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...