我知道这听起来像是一个古老的愚蠢问题,但我在互联网上搜索了所有内容,但我仍然不明白一件事。我知道 try-finally 将在停止错误之前运行 finally 代码(或者在没有引发异常时不停止)并且 try-except 将在引发异常时运行except代码。但我仍然不明白的是 try-except 在 try-finally 语句中的意义。我会写一个例子
我总是做的是这样的:
a:=x.Create;
try
a.DoRiskyStuff;
except
ShowMessage('Error!');
end;
a.free;
Run Code Online (Sandbox Code Playgroud)
多年来我从未使用过 finally 子句,因为我总是处理错误,而且我从来不明白将它们嵌套在一起使用的意义何在。我的解决方案有什么不好?为什么在示例中使用这样的东西很常见:
a:=x.Create;
try
try
a.DoRiskyStuff;
except
ShowMessage('Error!');
end;
finally
a.free;
end;
Run Code Online (Sandbox Code Playgroud)
有什么不同?当所有清理工作都可以在 try-except 之后完成时,为什么有人要使用 finally 子句?
非常感谢您的回答!
编辑:我更改了创建行,所以你们中的一些人想要为此而抨击我;)
delphi ×1