{exception 'message'} executes throw new Exception ('message')
inside the tag's handler. Where {error} reports an error the polite
way, through padError(), this one behaves like PHP code that fails - a database
library that throws, a division by zero - so it is the tag to try out how an application and
its configuration deal with such a failure.
With $padErrorTry on (the default) the engine runs every tag handler inside a
try guard: the exception is caught there and handed to the configured
$padErrorAction, the same way as an error - under pad the request
ends with status 500 and the report (the request id for a visitor who is not local), under
log or ignore the page renders on without the tag. With the guards
off it reaches PHP's exception handler: the error action records it and the request ends there
as a failure, whatever the action.
It is mainly there for testing: the regression suites use it to prove that every error action and every guard behaves as documented. In application code, prefer {error}.