I think I've read that exceptions inside a `with` do not allow `__exit__` to be call correctly. If I am wrong on this note, pardon my ignorance.

So I have some pseudo code here, my goal is to use a lock context that upon `__enter__` logs a start datetime and returns a lock id, and upon `__exit__` records an end datetime and releases the lock:

```
def main():
    raise Exception

with cron.lock() as lockid:
    print('Got lock: %i' % lockid)
    main()

```

How can I still raise errors in addition to existing the context safely?

*Note: I intentionally raise the base exception in this pseudo-code as I want to exit safely upon any exception, not just expected exceptions.*

*Note: Alternative/standard concurrency prevention methods are irrelevant, I want to apply this knowledge to any general context management.* I do not know if different contexts have different quirks.

PS. Is the `finally` block relevant?