使用try-except块包装try-finally块之间有什么区别,反之亦然?

klu*_*udg 5 delphi exception-handling

Delphi中两种编码模式之间是否存在实际差异:

版本1

try
  try
    {Do something}
  finally
    {Do tidy up}
  end
except
  {Handle exception}
end;
Run Code Online (Sandbox Code Playgroud)

版本2

try
  try
    {Do something}
  except
    {Handle exception}
  end
finally
  {Do tidy up}
end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

有两点不同:

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

通常你不关心最后提升的块.你根本不希望发生这种情况,如果发生这种情况,有些东西可能会非常破碎.

因此,重要的区别在于finally是否在异常处理程序之前运行,反之亦然.有时它并不重要,但它往往确实有所作为.