бросить новый против попробовать / поймать - PullRequest
0 голосов
/ 09 февраля 2012

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

В связи с этим, каково правило большого пальца /общая практика для решения, когда использовать «бросить новый» или поймать блоки?

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Catch означает, что вы можете обработать исключение.

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

throw new означает, что вы создаете ошибку, которую кто-то выше вас может захотеть отловить. Помните, что вызывающие абоненты могут захотеть обработать / перехватить вашу ошибку, поэтому не выбрасывайте новые «Exception» или «ApplicationException» - генерируйте определенный тип исключения, который наследуется от исключения, чтобы пользователь знал, что он обрабатывает.

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

Вот похожий пост: Попытка понять исключения в C #

2 голосов
/ 09 февраля 2012

Обработка должна выполняться на самом низком уровне, который может обработать исключение. Например. если арифметическая функция низкого уровня дает исключение деления на ноль, вы можете продолжить. Если возникает ошибка ввода-вывода файла, возможно, ее следует обработать очень высоко в потоке приложения, это зависит от ситуации.

Throw new следует использовать там, где вы хотите сгенерировать исключение, то есть там, где возникает исключение.

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

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