Jeremy Hylton wrote at 2003-2-3 10:45 -0500:
... Note that a new transaction is begin implicitly any time a persistence object is referenced. So the error handling code does execute in the context of a transaction. I know... It may be that it's just not the transaction you'd like it to be in. I assume that some work done during error handling is getting committed with the next successful request. Yuck. That's the problem.
How does user-level error handling get invoked in Zope? From "ZPublisher.Publish". It essentially executes the code outlined in my original post:
transaction.begin() try: main_action() transaction.commit() except: transaction.abort() handle_error() There is some magic to determine "main_action" and "handle_error" irrelevant to our current discussion. Dieter