Kent Pitman, a member of the X3J13 Common Lisp standards committee, wrote a terrific paper (http://www.nhplace.com/kent/Papers/Condition-Handling-2001.h...) on the subject of various condition handling systems, which includes examples of various error-handling systems.
Also interesting because it mentions PL/I as an antecedent to the Lisp condition handling. It says that PL/I had downward lexical scoping. I can't remember the details (I haven't looked at PL/I for over 20 years), but I believe that it means that the PL/I exception handler had access to the whole call stack, so you could make meaningful stack dumps from the handler, including variables. By today's standards the whole thing was quite clunky. A RETURN from the handler would resume execution. A GOTO to a label in the procedure enclosing the handler would unwind the call stack.