Попробуй поймать возобновить - PullRequest
0 голосов
/ 05 января 2011

если я использую код

try
{
line one 
line 2
line 3
.
.
.
.
}
catch(Exception x)
{
}

теперь, если исключение происходит в любой строке, которую я не знаю, и мы делаем некоторые вещи в улове, чтобы доза исключения не появлялась снова в этой строке, теперь нам нужно вернуться к строке, из которой произошло исключение, и выполнить ту же строку, как мы можем это сделать

Ответы [ 4 ]

3 голосов
/ 05 января 2011

Предполагая, что это Java, вы не можете этого сделать - как только будет сгенерировано исключение, ничего из остального блока try не будет выполнено.Вам придется использовать несколько блоков try / catch, чтобы явно делать то, что вы хотите:

try {
    line one 
} catch (Exception x) {
    fixup line one
}

try {
    line 2
} catch (Exception x) {
    fixup line 2
}

... и т. Д.

0 голосов
/ 05 января 2011

Вы можете вставить блок try / catch внутри цикла следующим образом:

bool done = NO;

while ( ! done ) {
    try {
        done = YES;
    } catch {

    }
}

Это приведет к повторному выполнению всего блока.Если вы хотите продолжить с того места, на котором остановились, вам нужно отслеживать свое состояние по пути:

bool     done = NO;
int     state = 0;  // setup some constants, kStateA = 0, kStateB = 1, etc:

while ( ! done ) {
    try {
        switch ( state ) {
            case kStateA:   line 1; ++state;    // fall through
            case kStateB:   line 2; ++state;
            // etc.
        }   

        done = YES;
    } catch {

    }
}

Приведенный выше код, упрощенный, чтобы больше соответствовать вашему вопросу, выглядит следующим образом (хотяконцепция машины все еще лежит в основе):

bool    done = NO;
int     lineNumber = 1;

while ( ! done ) {
    try {
        switch ( lineNumber ) {
            case 1: line 1; ++lineNumber;   // fall through
            case 2: line 2; ++lineNumber;   // fall through
            // etc.
        }   

        done = YES;
    } catch {

    }
}
0 голосов
/ 05 января 2011

Ты не.Если вы исправили проблему, вы должны снова запустить весь блок.Смысл блока try в том, что в нем есть все необходимое для выполнения определенной задачи.Исключение делает все после этого в задаче невозможным.Если вам нужно очистить, скажем, открытые файловые дескрипторы, вы можете использовать блок finally;но вам действительно нужно просто решить проблему и повторить попытку или умереть с хорошим сообщением об ошибке.

0 голосов
/ 05 января 2011

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

try {
    //some exception prone code
}
catch(Exception e) {
    //handle exception
}
finally {
    //Always runs after exception caught or if no exception thrown
}
...