except block may be nested inside a
AcquireResource; try UseResource1; try UseResource2; except on E: EResourceUsageError do begin HandleResourceErrors; end; end; UseResource3; finally ReleaseResource; end;
EResourceUsageError occurs in
UseResource2, then execution will jump to the exception handler and call
HandleResourceError. The exception will be considered handled, so execution will continue to
UseResource3, and then
If an exception of any other type occurs in
UseResource2, then the exception handler show here will not apply, so execution will jump over the
UseResource3 call and go directly to the
finally block, where
ReleaseResource will be called. After that, execution will jump to the next applicable exception handler as the exception bubbles up the call stack.
If an exception occurs in any other call in the above example, then
HandleResourceErrors will not be called. This is because none of the other calls occur inside the
try block corresponding to that exception handler.