对于Delphi或fpc中的嵌套异常处理,已经提到了很多东西。例如this之类的东西。我的问题,可能解决了对嵌套try...
块的需求,如果以下两个版本的代码之间存在实际差异,我就不会看到任何除了,如果expect
或finally
之后出现未定义的行为或某事......
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');
答案 0 :(得分: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
在链接的问题中,您有嵌套的异常块,并且这种情况的行为与上面的情况不同,就像在该问题的答案中解释的那样。