尝试 - 终于嵌套在 try-except 中

try-finally 区块可以嵌套在 try-except 区块内。

try
  AcquireResources;
  try
    UseResource;
  finally
    ReleaseResource;
  end;
except
  on E: EResourceUsageError do begin
    HandleResourceErrors;
  end;
end;

如果在 UseResource 内发生异常,则执行将跳转到 ReleaseResource。如果异常是 EResourceUsageError,则执行将跳转到异常处理程序并调用 HandleResourceErrors。任何其他类型的例外将跳过上面的异常处理程序并冒泡到下一个 try-except 阻塞调用堆栈。

AcquireResourceReleaseResource 异常会导致执行去异常处理程序,跳过 finally 块,或者是因为相应的 try 块尚未进入或因为 finally 块也已经被输入。