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