class_docstr: Helper for @contextmanager decorator.
class_docstr_tok: ["Helper","for","@","contextmanager","decorator","."]
code: def __exit__(self, type, value, traceback):
      if type is None:
          try:
              next(self.gen)
          except StopIteration:
              return
          else:
              raise RuntimeError("generator didn't stop")
      else:
          if value is None:
              # Need to force instantiation so we can reliably
              # tell if we get the same exception back
              value = type()
          try:
              self.gen.throw(type, value, traceback)
              raise RuntimeError("generator didn't stop after throw()")
          except StopIteration as exc:
              # Suppress StopIteration *unless* it's the same exception that
              # was passed to throw().  This prevents a StopIteration
              # raised inside the "with" statement from being suppressed.
              return exc is not value
          except RuntimeError as exc:
              # Don't re-raise the passed in exception
              if exc is value:
                  return False
              # Likewise, avoid suppressing if a StopIteration exception
              # was passed to throw() and later wrapped into a RuntimeError
              # (see PEP 479).
              if _HAVE_EXCEPTION_CHAINING and exc.__cause__ is value:
                  return False
              raise
          except:
              # only re-raise if it's *not* the exception that was
              # passed to throw(), because __exit__() must not raise
              # an exception unless __exit__() itself failed.  But throw()
              # has to raise the exception to signal propagation, so this
              # fixes the impedance mismatch between the throw() protocol
              # and the __exit__() protocol.
              #
              if sys.exc_info()[1] is not value:
                  raise
  
imports: import abc
  import sys
  import warnings
  from collections import deque
  from functools import wraps
label_desc: Use image node_id 4 for calling the _GeneratorContextManager obj's underlying member method code with example usage: obj.__exit__(type, value, traceback) and returns: unknown, False, False