<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def execute(action):
 """ Execute the given action. An action is any object with a ``forwards()`` and ``backwards()`` method. .. code-block:: python class CreateUser(object):
 def __init__(self, userinfo):
 self.userinfo = userinfo self.user_id = None def forwards(self):
 self.user_id = UserStore.create(userinfo) return self.user_id def backwards(self):
 if self.user_id is not None: # user_id will be None if creation failed UserStore.delete(self.user_id) If the ``forwards`` method succeeds, the action is considered successful. If the method fails, the ``backwards`` method is called to revert any effect it might have had on the system. In addition to defining classes, actions may be built using the :py:func:`reversible.action` decorator. Actions may be composed together using the :py:func:`reversible.gen` decorator. :param action: The action to execute. :returns: The value returned by the ``forwards()`` method of the action. :raises: The exception raised by the ``forwards()`` method if rollback succeeded. Otherwise, the exception raised by the ``backwards()`` method is raised. """

    # TODO this should probably be a class to configure logging, etc. The
    # global execute can refer to the "default" instance of the executor.
    try:
        return action.forwards()
    except Exception:
        log.exception('%s failed to execute. Rolling back.', action)
        try:
            action.backwards()
        except Exception:
            log.exception('%s failed to roll back.', action)
            raise
        else:
            raise