Ever wondered if there was a way to stop Zope from barfing error messages all over your screen when one of your scripts crashes and burns? Well, guess what - there is! Meet the and tags, which can be used to trap and resolve errors in script execution.
Now, the <dtml-try> statement can only deal with exceptions that it knows about. What about the ones the developer can't predict?
DTML also allows you to specify a catch-all exception handler, one which handles *any* type of exception generated - simply omit the exception name from the <dtml-except> statement. The following code snippet illustrates this technique:
<dtml-try>
<dtml-var alpha> divided by <dtml-var beta> is <dtml-var
expr="_.int(alpha)/_.int(beta)"
>.<br>
<dtml-except>
<b>Something bad happened. Call 911.</b>
</dtml-try>
You can even combine this with exception handlers for specific exceptions.
<dtml-try>
<dtml-var alpha> divided by <dtml-var beta> is <dtml-varexpr="_.int(alpha)/_.int(beta)" >.<br><dtml-except KeyError><b>Missing variable.</b><dtml-except ValueError><b>Illegal value.</b><dtml-except><b>Something bad happened. Call 911.</b></dtml-try>
This way, when an exception occurs, Zope will first check to see if an exception handler has been defined for that exception type. If so, the appropriate handler is invoked; if not, the exception is routed to the catch-all handler, which displays a generic error message.