Несколько выгода попытки или один?

Обычно, я сделал бы это:

try
{
    code

    code that might throw an anticipated exception you want to handle

    code

    code that might throw an anticipated exception you want to handle

    code
}
catch 
{

}

Там какие-либо преимущества являются к выполнению его этим путем?

code

try
{
    code that might throw an anticipated exception you want to handle
}
catch
{
}

code

try
{
    code that might throw an anticipated exception you want to handle
}
catch
{
}

code

Обновление:

Я первоначально задал этот вопрос w/reference C#, но как A. Levy прокомментировал, это могло относиться к любому языку обработки исключений, таким образом, я заставил теги отразить это.

63
задан Steve 13 July 2010 в 18:54
поделиться

10 ответов

Это зависит от ситуации. Если вы хотите обеспечить специальную обработку конкретных ошибок, используйте несколько блоков catch:

try
{ 
    // code that throws an exception
    // this line won't execute
}
catch (StackOverflowException ex)
{
    // special handling for StackOverflowException 
}
catch (Exception ex)
{
   // all others
}

Если же вы хотите обработать исключение и продолжить выполнение, поместите код в отдельные блоки try-catch:

try
{ 
    // code that throws an exception

}
catch (Exception ex)
{
   // handle
}

try
{ 
    // this code will execute unless the previous catch block 
    // throws an exception (re-throw or new exception) 
}
catch (Exception ex)
{
   // handle
}
77
ответ дан 24 November 2019 в 16:19
поделиться

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

11
ответ дан 24 November 2019 в 16:19
поделиться

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

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

.
4
ответ дан 24 November 2019 в 16:19
поделиться

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

2
ответ дан 24 November 2019 в 16:19
поделиться

2-й способ, но в идеале используйте защиту кода - попытка / уловка стоит дорого

0
ответ дан 24 November 2019 в 16:19
поделиться

Это зависит от характера ошибок, возникающих в вашем коде.

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

  2. Если ошибки требуют другой обработки, разделите их, потому что это необходимо.

НЕ ПРИМЕНЯЙТЕ ЕДИНЫЙ МЕТОД ДЛЯ ВСЕХ СЛУЧАЕВ. ПРОГРАММИРОВАНИЕ В большинстве случаев зависит от контекста:)

Вам необходимо достичь баланса «ХОРОШО / СЛОЖНО» и «ПЛОХО / ПРОСТО». Чем больше вы кодируете, тем меньше вы будете сталкиваться с подобной дилеммой :)

Удачного программирования!

2
ответ дан 24 November 2019 в 16:19
поделиться

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

14
ответ дан 24 November 2019 в 16:19
поделиться

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

Кроме того, если вы можете использовать try/finally или шаблон RAII вместо try/catch, то вам следует это сделать.

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

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

2
ответ дан 24 November 2019 в 16:19
поделиться

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

1
ответ дан 24 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

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