NAME
       catch - Evaluate script and trap exceptional returns

SYNOPSIS
       catch script ?varName?


DESCRIPTION
       The  catch  command  may  be  used  to prevent errors from
       aborting command  interpretation.   Catch  calls  the  Tcl
       interpreter  recursively  to  execute  script,  and always
       returns without raising an error, regardless of any errors
       that might occur while executing script.

       If  script  raises  an error, catch will return a non-zero
       integer value corresponding  to  one  of  the  exceptional
       return  codes  (see tcl.h for the definitions of code val-
       ues).  If the varName argument is given, then the variable
       it  names  is  set  to the error message from interpreting
       script.

       If script does not raise an error,  catch  will  return  0
       (TCL_OK)  and  set the variable to the value returned from
       script.

       Note that catch catches all  exceptions,  including  those
       generated  by  break  and continue as well as errors.  The
       only errors that are not caught are  syntax  errors  found
       when  the  script  is compiled.  This is because the catch
       command only catches  errors  during  runtime.   When  the
       catch  statement  is  compiled,  the script is compiled as
       well and any syntax errors will generate a Tcl error.


EXAMPLES
       The catch command may be used in an if to branch based  on
       the success of a script.

              if { [catch {open $someFile w} fid] } {
                  puts stderr "Could not open $someFile for writing\n$fid"
                  exit 1
              }
       The  catch  command will not catch compiled syntax errors.
       The first time proc foo is called, the body will  be  com-
       piled and a Tcl error will be generated.

              proc foo {} {
                  catch {expr {1 +- }}
              }


SEE ALSO
       error(n), break(n), continue(n)


KEYWORDS
