Dynamic scoping causes problems. Notice the integration of predefined errors with programmer chosen errors. I believe the LISP is one of these in addition to Ada and Clu. This is a debatable choice. 13.5 Java Java has an interesting exception feature that raises its head the moment you try to interact with a user.
Throwable objects know how to handle the run time stack and other useful things.
Error and Exception are ready-made API classes derived from Throwable. It allows you to provide a piece of code to a block that can not be skipped by an exception in the block. This simplifies tidying of things. This shows a lot of possible, ready made errors and exceptions. Therefore you have to either catch any exceptions that are documented or document that your code throws them.