嘗試 - 終於巢狀在 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 塊也已經被輸入。