Shane Hathaway wrote:
There's a lot of boilerplate code there.  Using your suggestion, I could
write that something like this:

    def transaction():
        begin_transaction()
        try:
            continue
        except:
            abort_transaction()
            raise
        else:
            commit_transaction()

    with transaction():
        changestuff()
        changemorestuff()

For that to work, the behaviour would need to differ slightly from what I envisioned (which was that the 'continue' would be behaviourally equivalent to a 'yield None').


Alternatively, something equivalent to the above could be written as:

def transaction():
  begin_transaction()
  continue
  ex = sys.exc_info()
  if ex[0] is not None:
    abort_transaction():
  else:
    commit_transaction():

Note that you could do this with a normal resource, too:

class transaction(object):
  def __enter__():
      begin_transaction()

  def __exit__():
    ex = sys.exc_info()
    if ex[0] is not None:
      abort_transaction():
    else:
      commit_transaction():

Cheers,
Nick.

--
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---------------------------------------------------------------
            http://boredomandlaziness.skystorm.net
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to