Как обрабатывать исключения? - PullRequest
9 голосов
/ 12 декабря 2010

Это вопрос о лучшей практике .net. Я всегда ловил и сохранял информацию об исключениях во всех моих веб-приложениях и приложениях для оконных форм следующим образом:

  1. Окружает каждый метод try try (Исключение исключения)
  2. Для любого слоя, кроме переднего, добавьте исключение для слоя выше
  3. На переднем уровне записал исключение в файл журнала (обычно с использованием log4config.dll) и представил пользователю удобное сообщение.

Это лучший способ обработки исключений? Или я должен сделать что-то другое в моих следующих проектах?

Ответы [ 4 ]

6 голосов
/ 12 декабря 2010

Я бы не добавил 1 и 2, если бы у меня не было какой-то конкретной причины; например, чтобы изменить (обернуть) сообщение; в этом нет необходимости, поскольку исключения все равно будут повышаться. И, сделав неправильно, вы можете случайно удалить всю важную трассировку стека (throw; против throw ex; - первое предпочтение).

2 голосов
/ 12 декабря 2010

Следующий код проблематичен, поскольку он перезаписывает исходную трассировку стека для e, что затрудняет диагностику проблем:

public void Foo() {
    try {
        Bar();
    } catch(Exception e) {
        throw e; // re-throw; overwrites original stacktrace in 'e'
    }
}

В следующем коде нет вышеуказанной проблемы с перезаписью stacktrace, но все еще неоправданно подробно:

public void Foo() {
    try {
        Bar();
    } catch(Exception e) {
        throw; // re-throw; preserves original stacktrace in 'e'
    }
}

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

public void Foo() {
    Bar();
}
2 голосов
/ 12 декабря 2010

Лучший ответ вы можете получить на Рекомендации по обработке исключений

0 голосов
/ 29 ноября 2011

Вот как НЕ обрабатывать исключения.

public void method1(){
    try{
        ....
        // all the code goes here
        // declare any helper methods throw throwable
        // eg: private boolean check1() throws Throwable{ ...}
        ....   
    }catch(Throwable t){
       System.out.println("oops...error...good luck debugging. ");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...