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