Когда нужно уклоняться от исключений и когда обрабатывать их - PullRequest
1 голос
/ 12 декабря 2008

Какие руководящие принципы вы используете, когда решаете, следует ли методу уклоняться от исключения (то есть: разрешить распространение исключения) или обрабатывать его после получения исключения?

Вот пример того, что я пытаюсь спросить

Если у меня есть три метода method1,2,3 и 3. Method1 вызывает Method2, который вызывает Method3. и исключение выдается только в методе 3, когда я должен позволить исключению распространяться вверх следующим образом (извините за мою псевдо-Java;))

   method1 {
        try {
            call method2;
        } catch (exception e) {
            doErrorProcessing;
        }
    }

    method2 throws exception {
        call method3;
    }

    method3 throws exception {
        call readFile;
    }

И когда мне следует обработать исключение, как только оно будет вызвано следующим образом

   method1 {
        call method2;
    }

    method2 {
        call method3;
    }

    method3 {
        try {
            call readFille
        } catch (exception e) {
            doErrorProcessing;
        }
    }

Ответы [ 5 ]

7 голосов
/ 12 декабря 2008

Правило, которому я следую:

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

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

1 голос
/ 12 декабря 2008

Как и все ответы в программном обеспечении, этот для меня "это зависит".

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

0 голосов
/ 12 декабря 2008

С точки зрения Java, я всегда стараюсь использовать непроверенные исключения, чтобы избежать добавления объявлений throws в сигнатуры методов.

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

0 голосов
/ 12 декабря 2008

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

0 голосов
/ 12 декабря 2008

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

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