尝试 - 嵌套在 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 块内。