def push(self, exit):
                """Registers a callback with the standard __exit__ method signature
        
                Can suppress exceptions the same way __exit__ methods can.
        
                Also accepts any object with an __exit__ method (registering a call
                to the method instead of the object itself)
                """
                # We use an unbound method rather than a bound method to follow
                # the standard lookup behaviour for special methods
                _cb_type = type(exit)
                try:
                    exit_method = _cb_type.__exit__
                except __HOLE__:
                    # Not a context manager, so assume its a callable
                    self._exit_callbacks.append(exit)
                else:
                    self._push_cm_exit(exit, exit_method)
                return exit # Allow use as a decorator
dataset/ETHPy150Open enthought/traits/traits/_py2to3.py/ExitStack.push