尝试 - 嵌套在 try-finally 内部

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

AcquireResource;
try
  UseResource1;
  try
    UseResource2;
  except
    on E: EResourceUsageError do begin
      HandleResourceErrors;
    end;
  end;
  UseResource3;
finally
  ReleaseResource;
end;

如果在 UseResource2 中发生 EResourceUsageError,则执行将跳转到异常处理程序并调用 HandleResourceError。该异常将被视为已处理,因此执行将继续 UseResource3,然后 ReleaseResource

如果在 UseResource2 中发生任何其他类型的异常,则此处显示的异常处理程序将不适用,因此执行将跳过 UseResource3 调用并直接转到 finally 块,其中将调用 ReleaseResource。之后,执行将跳转到下一个适用的异常处理程序,因为异常会使调用堆栈冒泡。

如果上例中的任何其他调用发生异常,则不会调用 HandleResourceErrors 。这是因为没有其他调用发生在对应于该异常处理程序的 try 块内。