Is it possible to ensure the __exit__() method is called even if there is an exception in __enter__()?  
>>> class TstContx(object):
...    def __enter__(self):
...        raise Exception('Oops in __enter__')
...
...    def __exit__(self, e_typ, e_val, trcbak):
...        print "This isn't running"
... 
>>> with TstContx():
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __enter__
Exception: Oops in __enter__
>>> 
Edit
This is as close as I could get...
class TstContx(object):
    def __enter__(self):
        try:
            # __enter__ code
        except Exception as e
            self.init_exc = e
        return self
    def __exit__(self, e_typ, e_val, trcbak):
        if all((e_typ, e_val, trcbak)):
            raise e_typ, e_val, trcbak
        # __exit__ code
with TstContx() as tc:
    if hasattr(tc, 'init_exc'): raise tc.init_exc
    # code in context
In hind sight, a context manager might have not been the best design decision