2016-04-16 5 views
1

Для обработки вложенных исключений в Delphi или fpc много упоминается. Например, что-то вроде this. Мой вопрос, что, возможно, решает необходимость вложенных try... блоков, является , если существует реальная разница между следующими 2 версиями кода, я не вижу никакого кроме если неопределенное поведение или что-то происходит после expect или finally ...попробуйте, кроме как в конце концов, в Delphi

try 
    StrToInt('AA'); 
finally 
    writeln('I absolutely need this'); 
end; 
writeln('and this'); 

и ...

try 
    StrToInt('AA'); 
except 
end; 
writeln('I absolutely need this'); 
writeln('and this'); 

ответ

8

Да есть диф Ференц. Огромный.

Если в блоке try нет исключений, то обе версии будут выполнять весь код, но если существует поведение исключения, оно отличается.

В первой версии вашего кода ничего после finally блок не будет выполнен, и исключение будет распространено на следующий уровень.

try 
    StrToInt('AA'); // if this code throws exception and it will 
finally 
    writeln('I absolutely need this'); // this line will execute 
end; 
writeln('and this'); // this line will not execute 

Во второй версии исключения будут обработаны except блок и код, следующий будет продолжать нормальное выполнение.

try 
    StrToInt('AA'); // if this code throws exception and it will 
except 
end; 
writeln('I absolutely need this'); // this line will execute 
writeln('and this'); // this line will also execute 

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


Документация: Delphi Exceptions

+0

Не видел, что в документации. Таким образом, в блоке 'try..finally' элемент управления выпрыгивает из функции, когда' finally' заканчивается, ** if * и только * if * исключение возникает во время 'try'. Благодарим за это. – Vassilis

+0

Документировано. Что ты читаешь? –

+0

Вы имеете в виду это? «Если исключение возникает, но не обрабатывается в предложении finally, ** это исключение ** распространяется из инструкции try ... finally ...». Надеюсь, что эта дискуссия не является результатом моего плохого английского языка! – Vassilis

 Смежные вопросы

  • Нет связанных вопросов^_^