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