Почему лучше ловить исключение высоко в стеке вызовов, а не раньше, чем оно может быть обработано? - PullRequest
6 голосов
/ 27 марта 2011

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

Скотт Хансельман : Помните, что Application_Error существует. Поймай исключения как можно выше, а не так низко.

Я полагаю, что исключение должно быть поймано там, где оно может быть обработано, не важно, высокий или низкий. Разве это не правда? Если нет, то почему?

Пожалуйста, добавьте пример с вашим ответом, если это возможно.

Спасибо

Ответы [ 3 ]

5 голосов
/ 27 марта 2011

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

Скажем, у вас есть код, который пытается открыть файл и прочитать некоторые данные, и он генерирует исключение, если файл не существует.Код в этой области не может сделать ничего, кроме залога, но несколько кадров вверх по стеку вызовов вызывающий метод может сказать: «О, хорошо, есть исключение. Вместо этого я попробую этот альтернативный файл» или «Я думаю, этот файл не был»не существует, поэтому я продолжу и создам новый. "

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

1 голос
/ 27 марта 2011

Я считаю, что исключение должно быть поймано там, где оно может быть обработано

Абсолютно. Дело в том, что ниже в стеке вызовов вы с меньшей вероятностью узнаете, как с этим справиться.

0 голосов
/ 27 марта 2011

Я думаю, что вы должны ловить исключения в 2 ситуациях:

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