Syntax:
:Try ... :CatchIf <boolean expression> ... :CatchAll ... :EndTry
The block of code following the :Try keyword is executed, until either an error occurs, or a :CatchIf, :CatchAll, :End or :EndTry is encountered.
If no error has occurred within the :Try block, execution transfers to the statement after the :End or :EndTry.
If an error occurs in the :Try block (either in the statements in this function, or in any functions called from it), control transfers to the first :CatchIf statement (if any), and the boolean expression is evaluated. If it is true, the block of code following the :CatchIf is executed, and execution then resumes after the :EndTry or :End. If the expression is false, the same procedure is followed for any further :CatchIf blocks in the sequence. If none of the tests is true, the :CatchAll block (if any) is executed. It is permissible to have as many :CatchIf sections as you like.
Once an error has been trapped and control passed to a :CatchIf or :CatchAll statement, the error trap is disabled. Thus, if a second error occurs, it will not be trapped, and the function will stop in the normal way (unless the whole :Try... :EndTry sequence is itself executed under another error trap). :Try..:EndTry blocks can be nested.
Typically, you use the :CatchIf statement to catch specific types of error, by looking at ŒLER or ŒET.
For example:
’R„A DIVIDE B [1] © Protected divide [2] :Try [3] © Do division under error-trapped conditions [4] R„A÷B [5] :CatchIf 11=†ŒLER [6] © DOMAIN ERROR occurred [7] R„0 [8] :CatchAll [9] © Some other error occurred [10] 'Unexpected error. The message was:' [11] ' ',ŒEM [12] … [13] :EndTry ’ 4 DIVIDE 3 1.333333333 4 DIVIDE 0 0 DIVIDE 4 Unexpected error. The message was: VALUE ERROR DIVIDE[4] R„A÷B ^