try catch

Gamma: Version 4.0
Prev |  | Next

# `try catch`

`try catch` -- catches errors in the body code.

## Syntax

    try statement catch statement

## Arguments

`statement`

  Any Gamma or Lisp statement.

## Returns

If no error occurs, the result of evaluating the `try` `statement`. If an error occurs, the result of the `catch` `statement`.

## Description

This statement catches any errors that may occur while evaluating the `try` `statement` code. If no error occurs, then `try catch` will finish without ever evaluating the `catch` `statement`. If an error does occur, `try catch` will evaluate the catch `statement` code immediately and the error condition will be cleared. This is usually used to protect a running program from a piece of unpredictable code, such as an event handler. If the error is not caught it will be propagated to the top-level error handler, causing the interpreter to go into an interactive debugging session.

## Example

The following code:

        #!/usr/cogent/bin/gamma

        try
        {
           2 + nil;
        }
        catch
        {
           princ("Error:\n", _error_stack_, "\n");
        }

Will give these results:

        Error:
        ((trap_error #0=(+ 2 nil) (princ Error:
         _error_stack_
        )) #0#)

The following piece of code will run an event loop and protect against an unpredictable event.

        while(t)
        {
             try (next_event()) catch (print_trapped_error());
        }

        function print_trapped_error ()
        {
             princ("Error:\n", _error_stack_, "\n");
             princ("Clearing error condition and continuing.\n");
        }

See the Stop Processes section of the Common Functions for Any Program chapter (Tutorial Two) in the Cogent Tools Demo and Tutorials book for an example of this function used in context.

## See Also

`error`, Statements, `trap_error`, `protect unwind`, Tutorial II Error Handling

Prev | Home | Next
`switch` | Up | `while`

Copyright 1995-2002 by Cogent Real-Time Systems, Inc.