Почему Выгодой (Исключение) является почти всегда плохая Идея?

Почему catch(Exception) почти всегда плохая Идея?

59
задан dasblinkenlight 14 November 2017 в 16:02
поделиться

5 ответов

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

Общий принцип - поймать наиболее конкретный тип, который вы можете.

64
ответ дан 24 November 2019 в 18:23
поделиться

Вы должны перехватывать исключения, только если вы умеете их правильно обрабатывать. Поскольку вы не можете должным образом обработать все возможные исключения, вы не должны их перехватывать: -)

8
ответ дан 24 November 2019 в 18:23
поделиться

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

Таким образом, вы должны перехватывать только исключения:

  • , которые вы точно знаете, как с ними бороться (например, FileNotFoundException или около того)
  • , когда вы повторно вызовете их впоследствии (например, для выполнения очистки после сбоя)
  • , когда вам нужно передать исключение в другой поток
5
ответ дан 24 November 2019 в 18:23
поделиться

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

Но иногда может потребоваться одинаковая обработка всех исключений. В таких случаях улов (исключение) может быть приемлемым. Например:

    try
    {
        DoSomething();
    }
    catch (Exception e)
    {
        LogError(e);
        ShowErrorMessage(e); // Show "unexpected error ocurred" error message for user.
    }
4
ответ дан 24 November 2019 в 18:23
поделиться

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

22
ответ дан 24 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: