5

Delphi中的两种编码模式之间是否有任何实际区别:

版本 1

try
  try
    {Do something}
  finally
    {Do tidy up}
  end
except
  {Handle exception}
end;

版本 2

try
  try
    {Do something}
  except
    {Handle exception}
  end
finally
  {Do tidy up}
end;
4

2 回答 2

6

有两个区别:

  1. except 和 finally 块执行的相对顺序不同。在版本 1 中,finally 在except 之前执行。在版本 2 中,执行顺序是相反的。
  2. 在版本 1 中,如果 finally 块引发,那么它将由 except 块处理。在版本 2 中,如果 finally 块引发,那么它将由下一个包含异常处理程序(即在此代码之外)处理。

通常你不关心 finally 块加注。你根本没想到会发生这种情况,如果真的发生了,那么事情可能很糟糕。

所以重要的区别是 finally 是否在异常处理程序之前运行,反之亦然。有时这无关紧要,但通常确实会有所作为。

于 2012-09-16T09:03:57.153 回答
2

当您使用try..except以下行时执行。

Resource := TAbstractResource.Create;
try
  Resource.DoSomeThing;
except
  On E:Exception Do 
   HandleException(E);
end;
FreeAndNil(Resource);
于 2012-09-16T09:13:53.070 回答