Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

Как перебросить исключение дальше в обработчике исключения? - C++

07.09.2012, 22:27. Просмотров 494. Ответов 7

Допустим, я работаю с сетью и пытаюсь обратиться к некторому хосту и если он не отвечает, то бросается исключение-объект наследник std::exception. Я должен максимум 5 раз перехватить это исключение, а на 6 раз бросить его дальше. Как лучше всего это реализовать?
Пока скелет примерно такой, что мне надо добавить сюда или как его отредактировать, чтобы работало как я прошу
C++
1
2
3
4
5
6
7
8
9
10
11
for (int c = 0; c < 5 && !requestSuccess; ++c)
{
         try
         {
            doRequest(GET, getUrl, htmlByteArray);
            requestSuccess = true;
         } catch (ConnectionException &e)
         {
            continue;
         }
}
Пока только вариант вроде throw (e)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 22:27     Как перебросить исключение дальше в обработчике исключения?
Посмотрите здесь:

Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. - C++
Как правильно выбирать в какой ситуации применять то, а в какой другое? Есть, конечно, очевидные ситуации, например, не открывается файл,...

Как правильно перебросить аргументы в variadic template? - C++
всем привет, можете помочь пж, есть такая ф-ция: template&lt;typename ... Args&gt; inline wstring WStrFormat(const wstring&amp; format, Args ......

Как быть дальше? - C++
День добрый. Собственно сложилась такая ситуация - Имеется огромное желание изучать дальше языки программирование, и все то, что с...

Куда и как двигаться дальше? - C++
Здравствуйте! Я совсем недавно начал изучение программирование и все мои знания в этой области были получены из книги Ритчи и Кернигана...

Как генерировать исключения? - C++
Как сгенерировать исключение. Как выход индекса за пределы допустимого диапозона. Изучаю API

Как свиртуализировать исключения? - C++
Мне очень нравится как реализован перехват исключений в Python и Java: там в блоке catch не надо перечислять все виды исключений, а...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.09.2012, 22:31     Как перебросить исключение дальше в обработчике исключения? #2
Сделать throw в блоке catch если 5 раз перехватил.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
07.09.2012, 22:32  [ТС]     Как перебросить исключение дальше в обработчике исключения? #3
Герц, т.е. просто throw? без передачи ему всяких объектов?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.09.2012, 22:32     Как перебросить исключение дальше в обработчике исключения? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int c = 0; c < 6; ++c)
{
    try
    {
        doRequest(GET, getUrl, htmlByteArray);
        break;
    }
    catch (ConnectionException &e)
    {
        if (c == 5)
        {
            throw e;
        }
    }
}
же
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.09.2012, 22:33     Как перебросить исключение дальше в обработчике исключения? #5
throw того же самого исключения, что ты перехватываешь. Только вот с эллипсисом такое не прокатит, но наверняка можно что-то придумать. Да и обычно ты четко знаешь, какие исключения могут произойти.
P.S. Опа, Nick Alte ответил. Правда такой код имеет место
C++
1
2
3
catch ( ... ) {
    throw;
}
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
07.09.2012, 22:33     Как перебросить исключение дальше в обработчике исключения? #6
Цитата Сообщение от Buckstabue Посмотреть сообщение
просто throw? без передачи ему всяких объектов?
Да, именно так. Работает только внутри блока catch, при этом исключение распространяется уже за пределы блока, содержащего catch.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.09.2012, 22:52     Как перебросить исключение дальше в обработчике исключения? #7
Цитата Сообщение от Buckstabue Посмотреть сообщение
Я должен максимум 5 раз перехватить это исключение
в блоке catch должна быть переменная, которая инкрементируется при каждом входе

Добавлено через 13 минут
пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main()
{
    int i;
    
    i = 1;
    while (1)
        try {
            cout << i << endl;
            throw 1;
        } catch (int e) {
            cout << "See: " << e << endl;
            if (i++ >= 5)
                throw;
        }
    return 0;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
[guest@localhost tests]$ ./t
1
See: 1
2
See: 1
3
See: 1
4
See: 1
5
See: 1
terminate called after throwing an instance of 'int'
Аварийный останов
[guest@localhost tests]$
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 00:34     Как перебросить исключение дальше в обработчике исключения?
Еще ссылки по теме:

Как создавать информативные исключения? - C++
как создавать информативные исключения??? нигде не могу найти внятного объяснения :( единственный способ какой я знаю throw...

Как правильно вызывать исключения? - C++
как правильно вызывать исключения? я вот пишу например так: throw std::exception(&quot;Error!&quot;); исключение то выбрасывается, но сообщение...

Как бросать эти исключения? - C++
throw popOnEmpty();, throw pushOnFull(Value);. Что нибудь надо выше заинкладить/написать? Что именно?

Как заставить программу не выгружаться из памяти и работать дальше? - C++
Возьмем банальный пример клавиатурный шпион или чтонить в этом роде... Проект Win32 application я разместил в конце ВинМайн цикл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
08.09.2012, 00:34  [ТС]     Как перебросить исключение дальше в обработчике исключения? #8
accept, ясно, т.е. можно отказаться от вспомогательной переменной requestSuccess
Но у вас не предусмотрен нормальный выход из цикла. Т.е. если исключения не кидаются, то цикл все равно продолжается
Yandex
Объявления
08.09.2012, 00:34     Как перебросить исключение дальше в обработчике исключения?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru