Обычно, я сделал бы это:
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 прокомментировал, это могло относиться к любому языку обработки исключений, таким образом, я заставил теги отразить это.
Это зависит от ситуации. Если вы хотите обеспечить специальную обработку конкретных ошибок, используйте несколько блоков 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
}
Ни то, ни другое, просто используйте несколько блоков catch для определенных исключений (если только в блоке нет тонны кода и только пара строк может вызвать исключение. В этом случае я бы пошел с второй способ).
Второй метод, на мой взгляд, лучше, потому что он позволяет отлавливать ошибки с большей точностью.
Также плохо, когда весь код заключен в один большой блок try/catch, если у вашего приложения возникнет какая-то проблема и оно рухнет, но поскольку вы поймали в ловушку большое общее выполнение, вероятность того, что вы сможете правильно его обработать, будет ниже.
Внутри try catch должны быть специальные части, например, если вы читаете файл или принимаете пользовательский ввод. Так вы сможете лучше обработать это исключение
Я бы выбрал второй вариант, но всякий раз, когда я вижу этот шаблон кода, мое первое чувство - подумать о разделении его на несколько функций/методов. Очевидно, стоит ли это делать, зависит от того, что делает код ;)
2-й способ, но в идеале используйте защиту кода - попытка / уловка стоит дорого
Это зависит от характера ошибок, возникающих в вашем коде.
Если обработка тех ошибок, которые вы собираетесь сделать, такая же, используйте одну попытку ... уловить для этой группы кода. Иначе это будет утомительно.
Если ошибки требуют другой обработки, разделите их, потому что это необходимо.
НЕ ПРИМЕНЯЙТЕ ЕДИНЫЙ МЕТОД ДЛЯ ВСЕХ СЛУЧАЕВ. ПРОГРАММИРОВАНИЕ В большинстве случаев зависит от контекста:)
Вам необходимо достичь баланса «ХОРОШО / СЛОЖНО» и «ПЛОХО / ПРОСТО». Чем больше вы кодируете, тем меньше вы будете сталкиваться с подобной дилеммой :)
Удачного программирования!
Если бы я мог выбрать вторую, я бы, вероятно, разделил ее на две функции.
Вы думаете об этом неправильно. Что вам нужно сделать в ваших блоках ловли? Если вы хотите восстанавливаться после любого из возможных исключений, выполняя один и тот же код, независимо от того, какая операция вызвала исключение, то используйте один блок catch. Если вам нужно выполнять разные операции очистки в зависимости от того, какая операция выбросила исключение, то используйте несколько блоков catch.
Кроме того, если вы можете использовать try/finally или шаблон RAII вместо try/catch, то вам следует это сделать.
Я предпочитаю второй метод - он облегчает отладку, делает обработку ошибок более точной, а также хорошо вписывается в модульное тестирование.
Второй метод. Хранить код, который может вызвать исключение, отдельно от другого кода - секция становится меньше, и ею легче управлять вместо того, чтобы обернуть весь код, даже тот, который не будет вызывать исключений.