APLX Help : Help on APL language : Errors : Error trapping using :Try..:EndTry
|
|
|
Error trapping using
|
|
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 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
^
|
|
APLX Help : Help on APL language : Errors : Error trapping using :Try..:EndTry
|
|
Copyright © 1996-2010 MicroAPL Ltd