Context managers with class
- enter
- exit
Even if there was en exception in the middle of the process, the exit methods of each object will be called.
class MyCM:
def __init__(self, n):
self.name = n
def __enter__(self):
print('__enter__', self.name)
def __exit__(self, exception_type, exception, traceback):
print('__exit__ ', self.name)
def something(self):
print('something', self.name)
def main():
a = MyCM('a')
b = MyCM('b')
with a, b:
a.partner = b
b.partner = a
a.something()
raise Exception('nono')
b.something()
print('in main - after')
main()
print('after main')
__enter__ a
__enter__ b
something a
__exit__ b
__exit__ a
Traceback (most recent call last):
File "context-managers.py", line 27, in <module>
main()
File "context-managers.py", line 23, in main
raise Exception('nono')
Exception: nono