On Dec 15, 2005, at 4:01 PM, Nikko Wolf wrote:

Can you elaborate on what "strange and unpredictable behavior" you mean? I'm curious in general, but especially w.r.t. the code above?

BTW, a simple grep of sources in Zope (2.7.6-final) turns up 600+ places where a bare except is used, and my Zope instance (which uses Plone) contains over 350 more.

Often when you see a bare except, it is after some of the specific important exceptions are caught and re-raised:

try:
  something()
except ConflictError:
    raise
except:
    recover()


Even this is pretty poor style anyway (If you don't know enough about what is going wrong to know what is being thrown, you probably shouldn't be in charge of recovering from it.)

The problem with catching and swallowing ConflictError and similar internal Zope errors is that you leave your ZODB in an inconsistent state. Roughly, one request has started making modifications to the ZODB, then a second request has been making modifications to the same object. The ZODB has noticed this, and throws this ConflictError exception. It is expecting this exception to bubble up all the way out of your code, throwing away whatever potential modifications you have made to the ZODB and having Zope try your code again. (at that point, hopefully the task that didn't get the conflict error has completed and committed its changes. When your code is run again, it will see the new values from the other transaction.

Here an (again very rough) example:

Imagine that you have two collections of objects called "unprocessed" and "processed". A group of somethings or someones grab the next item in "unprocessed", and puts it into "processed". If two requests come in to grab the next item from "unprocessed" and put it one of the other buckets, at some point. one or both of them will get the ConflictError exception. If the exception is swallowed by the code both of them will save their copy of the object in "processed", and where you had one object before you now have two. If these objects were student quizzes, two copies of the same quiz will double the weight of the score. If these object were loan application, the amount of money you were paying out has doubled. All around bad news.


_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to