[Zope] Trying to trap ConflictError

Jonathan dev101 at magma.ca
Tue Jul 4 12:58:24 EDT 2006

----- Original Message ----- 
From: "Stefan H. Holek" <stefan at epy.co.at>
To: "Jonathan" <dev101 at magma.ca>
Cc: <zope at zope.org>
Sent: Tuesday, July 04, 2006 11:02 AM
Subject: Re: [Zope] Trying to trap ConflictError

> First, you should not - ever - catch a ConflictError. It is essential  for 
> ConflictErrors to be propagated to the ZPublisher.

This seems to be an extremely 'user-unfriendly' approach.

In my use case the error is being generated when an image object is being 
written to a temporary folder. If, for any reason, the image object is not 
able to be stored it would seem prudent to be able to handle this condition 
within the application software.

> Second, the conflict is detected at commit time, which happens at the 
> very end of the REQUEST. This likely is a while after your method has 
> executed.
> Stefan

Ok, this I can understand.  Is there any kind of 'post processing' 
mechanism/hooks that would enable application level software (external 
methods) to check for and handle errors at this point?


> On 4. Jul 2006, at 15:56, Jonathan wrote:
>> I am trying to trap the following error:
>> Traceback (innermost last):
>>   Module Zope2.App.startup, line 173, in zpublisher_exception_hook
>>   Module ZPublisher.Publish, line 121, in publish
>>   Module Zope2.App.startup, line 240, in commit
>>   Module transaction._manager, line 96, in commit
>>   Module transaction._transaction, line 380, in commit
>>   Module transaction._transaction, line 378, in commit
>>   Module transaction._transaction, line 433, in _commitResources
>>   Module ZODB.Connection, line 484, in commit
>>   Module ZODB.Connection, line 526, in _commit
>>   Module ZODB.Connection, line 554, in _store_objects
>>   Module tempstorage.TemporaryStorage, line 200, in store
>> ConflictError: database conflict error (oid 0x39b0, class 
>> BTrees._OOBTree.OOBucket, serial this txn started with 
>> 0x0366974da4fd2288 2006-07-04 13:33:38.669252, serial currently 
>> committed 0x0366974da54d9fcc 2006-07-04 13:33:38.742942)
>> in an external method, as follows:
>>         folder = self.unrestrictedTraverse(TEMPFOLDERIMAGES, None)
>>         try:
>>                 folder.manage_addImage(imageId, imageData)
>>         except:
>>                 <handle error message and return gracefully code>
>> But the try/except block is not catching the error! (the error  continues 
>> to show up in error_log)
>> (note: I started by trying "except ConflictError:", but that was  not 
>> working, so I went to the bare try/except)
>> The traceback does not show where the error originates in the  external 
>> method, but there is only one place where the external  methods writes to 
>> TemporaryStorage. Does this indicate that the  error is not bubbling up 
>> properly?
>> Any ideas as to why the error trapping is not trapping?  (running  Zope 
>> 2.9.2, debug=on)
> --
> Anything that, in happening, causes something else to happen,
> causes something else to happen.  --Douglas Adams

More information about the Zope mailing list