嘗試 - 巢狀在 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 塊內。