elisp: Processing of Errors

 
 10.6.3.2 How Emacs Processes Errors
 ...................................
 
 When an error is signaled, ‘signal’ searches for an active “handler” for
 the error.  A handler is a sequence of Lisp expressions designated to be
 executed if an error happens in part of the Lisp program.  If the error
 has an applicable handler, the handler is executed, and control resumes
 following the handler.  The handler executes in the environment of the
 ‘condition-case’ that established it; all functions called within that
 ‘condition-case’ have already been exited, and the handler cannot return
 to them.
 
    If there is no applicable handler for the error, it terminates the
 current command and returns control to the editor command loop.  (The
 command loop has an implicit handler for all kinds of errors.)  The
 command loop’s handler uses the error symbol and associated data to
 print an error message.  You can use the variable
 ‘command-error-function’ to control how this is done:
 
  -- Variable: command-error-function
      This variable, if non-‘nil’, specifies a function to use to handle
      errors that return control to the Emacs command loop.  The function
      should take three arguments: DATA, a list of the same form that
      ‘condition-case’ would bind to its variable; CONTEXT, a string
      describing the situation in which the error occurred, or (more
      often) ‘nil’; and CALLER, the Lisp function which called the
      primitive that signaled the error.
 
    An error that has no explicit handler may call the Lisp debugger.
 The debugger is enabled if the variable ‘debug-on-error’ (SeeError
 Debugging) is non-‘nil’.  Unlike error handlers, the debugger runs in
 the environment of the error, so that you can examine values of
 variables precisely as they were at the time of the error.