The statement TRY introduces a control structure with multiple statement
blocks. The first statement block try_block is always executed, whereas a branching off to exactly one of the remaining statement blocks only occurs if a
class-based exception is raised in try_block.
A TRY control structure defines the following statement blocks:
A TRY block try_block directly after the statement
TRY. The TRY block defines a protected area whose
class-based exceptions can be handled in the subsequent CATCH blocks. If
no exception is raised in the TRY block and it reaches its end, the system
resumes processing after ENDTRY. If a class-based exception is raised in
the TRY block, the system searches for an exception handler in the same TRY control structure or in an external structure (see
System Behavior).
One or more optional CATCH blocks catch_block
for handling exceptions, each directly after a CATCH
statement. If the end of a CATCH block is reached without it being left early,
the processing continues after the ENDTRY. The special statements RETRY and RESUME
can be listed in a CATCH block, to control the behavior of exception handling.
An optional CLEANUP block cleanup_block for cleanups directly after the statement CLEANUP.
All statement blocks of a TRY control structure can contain any kind of control structures, in particular further TRY control structures.
No exceptions (except those in category CX_NO_CHECK from event handlers) can be propagated from the
static constructors and
event handlers, which means they must always be handled locally.
Example
Division by zero in a TRY block. The relevant exception is caught with CATCH.