Вложенные try/catch
От: Мёртвый Даун Россия  
Дата: 17.12.19 07:17
Оценка:
Всем привет,
нашел у нас в лохматом коде несколько мест, где написаны вложенные try/catch.

try
{
    ...
}
catch(const E& e)
{
    try
    {
        ...
    }
    catch(const E& e)
    {
        try
        {
            ...
        }
        catch(const E& e)
        {
             ...
        }
    }
}


Там где "...", там реальная работа какая-то совершается, в БД что-то пишется, логи, и т.д.

Честно говоря первый раз такую практику увидел. Это нормально?
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Отредактировано 17.12.2019 7:20 Мёртвый Даун . Предыдущая версия .
Re: Вложенные try/catch
От: Шахтер Интернет  
Дата: 17.12.19 07:32
Оценка: +3
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Всем привет,

МД>нашел у нас в лохматом коде несколько мест, где написаны вложенные try/catch.

МД>
МД>try
МД>{
МД>    ...
МД>}
МД>catch(const E& e)
МД>{
МД>    try
МД>    {
МД>        ...
МД>    }
МД>    catch(const E& e)
МД>    {
МД>        try
МД>        {
МД>            ...
МД>        }
МД>        catch(const E& e)
МД>        {
МД>             ...
МД>        }
МД>    }
МД>}
МД>


МД>Там где "...", там реальная работа какая-то совершается, в БД что-то пишется, логи, и т.д.


МД>Честно говоря первый раз такую практику увидел. Это нормально?


А что здесь не нормального? Попытались что-то сделать, не получилось -- переходим к плану B, C и.т.д.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: Вложенные try/catch
От: Мёртвый Даун Россия  
Дата: 17.12.19 07:52
Оценка: +1
Здравствуйте, Шахтер, Вы писали:

Ш>А что здесь не нормального? Попытались что-то сделать, не получилось -- переходим к плану B, C и.т.д.


Не, я без наездов. Хотел поинтересоваться. Никогда не встречал такой организации в коде.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Re[3]: Вложенные try/catch
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 17.12.19 07:59
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Не, я без наездов. Хотел поинтересоваться. Никогда не встречал такой организации в коде.


Обычно она имеет место, просто неявно, за счет наличия try/catch внутри вложенных вызовов функций. Ну а тут, скорее всего, есть проблема в виде слишком огромной функции выполняющей слишком много задач. Иначе как бы в ней столь развесистая обработка ошибок образовалась бы?
Re: Вложенные try/catch
От: Chorkov Россия  
Дата: 17.12.19 08:26
Оценка: +1
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Всем привет,

МД>нашел у нас в лохматом коде несколько мест, где написаны вложенные try/catch.

МД>
МД>try
МД>{
МД>    ...
МД>}
МД>catch(const E& e)
МД>{
МД>    try
МД>    {
МД>        ...
МД>    }
МД>    catch(const E& e)
МД>    {
МД>        try
МД>        {
МД>            ...
МД>        }
МД>        catch(const E& e)
МД>        {
МД>             ...
МД>        }
МД>    }
МД>}
МД>


МД>Там где "...", там реальная работа какая-то совершается, в БД что-то пишется, логи, и т.д.


МД>Честно говоря первый раз такую практику увидел. Это нормально?


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

Если функция не слишком большая или запутанная (т.е. логика переходов прозрачная), можно оставить как есть.
Если такое дерево catch-ей присуствует в нескольких местах, и всетаки решитесь рефакторить, то обязательно, рефакторить все места одноверменно, чтобы сохранить "единство стиля", это очень поможет следующему читателю кода.
Re: Вложенные try/catch
От: Слава  
Дата: 17.12.19 08:35
Оценка: +1
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Всем привет,

МД>нашел у нас в лохматом коде несколько мест, где написаны вложенные try/catch.
МД>Честно говоря первый раз такую практику увидел. Это нормально?

В особых случаях — нормально. Ну а что ещё делать, если исключение может прилететь.
Re: Вложенные try/catch
От: rg45 СССР  
Дата: 17.12.19 09:18
Оценка: +1
Здравствуйте, Мёртвый Даун, Вы писали:

МД>нашел у нас в лохматом коде несколько мест, где написаны вложенные try/catch.

МД>Честно говоря первый раз такую практику увидел. Это нормально?

Смотря с какой точки зрения. С точки зрения языка никакого криминала. С точки зрения дизайна... Лично я бы присмотрелся к этому месту более пристально.
--
Не можешь достичь желаемого — пожелай достигнутого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.