up previous next

Catch

Syntax

Catch C EndCatch;
Catch C In E EndCatch;

where C is a sequence of commands and E is a variable identifier.
    

Summary

catch an error

Description

Usually, when an error occurs during the execution of a command, the error is automatically propagated out of the nesting of the evaluation. This can be prevented with the use of Catch.

If an error occurs during the execution of C, then it is captured by the command Catch and (in the second form) assigned to the variable E. If no error occurs, then E will contain the value Null. Note the use of the function GetErrMesg in the example below.

IMPORTANT NOTE: There is a bug in Catch. Any Return command used inside Catch must return some value. If not, the Return command will just return from the Catch-EndCatch statement; it will not return from the function within which the statement is embedded. There is an example below.

example

    
Define Test(N)
  Catch
    PrintLn(1/N);
  In E EndCatch;
  If Type(E) = ERROR Then Print("An error occurred: ", GetErrMesg(E)) EndIf;
EndDefine;
Test(3);
1/3

-------------------------------
Test(0);

An error occurred: Division by zero
-------------------------------

         --Illustration of the BUG --
Define Test2()
  Catch
    Print("Hello ");
    Return;  -- incorrect: no value is returned
  EndCatch;
  PrintLn("world.");
EndDefine;
Test2();
Hello world.

-------------------------------
Define Test3()
  Catch
    Print("Hello ");
    Return 3;  -- correct a value is returned
  EndCatch;
  PrintLn("world.");
EndDefine;
Test3();
Hello 3
-------------------------------
        
    

See Also