C ++, игнорировать исключения и продолжить код? - PullRequest
9 голосов
/ 05 октября 2011

Есть ли способ разрешить выполнение некорректного блока кода после исключения сгенерированного?

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

Это после сбоя кода в цикле while, я бы хотел, чтобы он снова начинался с вершины оператора while.

Есть ли способ сделать это в C ++?Кажется, что try / catch не работает в этой ситуации.

Дополнительная информация: Я хотел бы просто взять код в цикле while, превратить его в собственный исполняемый файл и поместить цикл while в bashсценария, но есть некоторые данные, требующиеся для каждой итерации, которые остаются статичными, и каждый раз для повторной загрузки этих данных требуется слишком много времени, поэтому я вынужден выполнить бесконечный цикл while в C ++

Ответы [ 3 ]

12 голосов
/ 05 октября 2011

Вам просто нужно перехватить исключение внутри цикла while:

while(true) 
{
    try 
    {
          // your code
    }
    catch (Exception e) { /* Please, at least do some logging or other error handling here*/ }
}   
1 голос
/ 05 октября 2011

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

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

0 голосов
/ 05 октября 2011

если бы вы могли опубликовать фрагмент кода, мы все могли бы помочь вам больше.но в целом у вас всегда должна быть какая-то обработка ошибок, будь то попытка {} catch {} или просто проверка переменной вроде:

while(true)
{

if(flag == "Error")
{
//error handle
}

else
{
//continue with code execution
}

}

надеюсь, что вы решите эту проблему!

...