# SPDX-License-Identifier: MIT
# Independently authored synchronous-with observations, pinned to CPython 3.9.6.
events = []

class Manager:
    def __init__(self, name, suppress):
        self.name = name
        self.suppress = suppress

    def __enter__(self):
        events.append('enter ' + self.name)
        return self.name

    def __exit__(self, kind, value, traceback):
        events.append('exit ' + self.name + ' ' + str(value))
        print(kind is None, kind is ValueError, kind is KeyError)
        return self.suppress

with Manager('outer', False) as outer, Manager('inner', False) as inner:
    print(outer, inner)
print(events)
events.clear()

original = ValueError('original')
with Manager('suppress', True):
    raise original
print('continued', events)
events.clear()

try:
    with Manager('outer', False), Manager('inner', False):
        raise original
except ValueError as error:
    print(error is original, str(error))
print(events)
events.clear()

def finish(mode):
    with Manager('function', False):
        for index in range(3):
            with Manager(str(index), False):
                if index == 0:
                    continue
                if mode:
                    return index
                break
    return 9

print(finish(True), finish(False))
print(events)
