Ловля исключения, делай и не делай - PullRequest
1 голос
/ 15 июля 2010

Всегда ли плохая методика программирования оставлять блок catch пустым при использовании блока try-catch?

В тех случаях, когда я ожидаю исключения, например, я читаю 10 значений из файла... и преобразование каждого значения в строку.Существует вероятность, что одно из 10 значений может быть нулевым, но я не хочу останавливать свое выполнение в этот момент и скорее продолжать (очевидное использование try catch)

Хромкий примериз того, что я пытаюсь:

String _text = textReader.ReadLine(); //Assuming this RETURNS a NULL value
try {  
      String _check = _text.ToString(); 
      //Do something with _check, but it should not be NULL
    }
catch (Exception) 
    { //Do Nothing }

В этот момент, когда я ловлю исключение:
1.Я не хочу регистрировать это.Так как я ожидаю ошибочного значения.
2.Я не хочу перебрасывать исключение в стек вызовов.
3.Я хочу просто продолжить выполнение
В этих случаях допустимо ли оставлять улов пустым?Или это полное НЕТ-НЕТ, и есть лучший способ справиться с этим?

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

Ответы [ 3 ]

4 голосов
/ 15 июля 2010

Я предполагаю, что вы имеете в виду

 _text.ToString()

, и вас беспокоит случай, когда _text может быть null ?

Iне нравится ваше использование исключений в этом случае.Помните, что кому-то нужно поддерживать этот код.Они видят:

catch (Exception) {  }

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

Почему вы не можете написать код:

 if ( _text != null ) {
      String _check = _nullValue.ToString();
 }

Это говорит о том, что вы имеете в виду.

Но, взяв это дальшечто означает получение значения NULL?Вы читаете файл, в котором может быть 10 значений.Я предполагаю, что, может быть, пустая строка дает вам ноль?

Что вы собираетесь делать, если получите:

 1
 2
 <blank line>
 4
 ...
 10  

Так что это 9 хороших значений и пустая строка.Что вы будете делать, если вместо этого вы получите 10 хороших значений и пустую строку?11 хороших ценностей?11 хороших значений и пустая строка?

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

Вы можете, например, выдать сообщение в конце

Your file contained 13 lines, two lines were blank. We processed 10 valid values and ignored one.

По крайней мере, в целях отладки у вас могут быть операторы трассировки в путях ошибок.

Резюме: полное игнорирование Исключений редко является правильным решением.

0 голосов
/ 16 июля 2010

Лучший аргумент, который мне понравился, заключался в том, что код станет крайне необслуживаемым. И моей целью было сделать мой код как можно более понятным. С учетом приведенных выше предложений у меня есть армия троичных операторов (мой личный фаворит над большими блоками if-else).
И код определенно выглядит лучше! и я думаю, что если try-catch хорошо не задокументирован, я сам не вижу веской причины для того, чтобы пустые операторы catch больше.

Спасибо, ребята!
-Ivar

0 голосов
/ 15 июля 2010

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

if(_text != null)
    // do something
...