On Sat, Nov 16, 2019, at 16:13, Greg Ewing wrote:
> On 17/11/19 4:54 am, Ricky Teachey wrote:
> 
> >     I think it'd be at least as confusing as the current situation.
> 
> It might be better to keep it as purely a context manager, and
> not load it down with any other baggage.
> 
> I wouldn't try to make it remember the current directory. Like
> a generator expression, the expectation is that it would be
> used while it's still fresh.
> 
> I seem to remember we had such a context manager for a brief
> time after the with-statement was invented, until someone had
> the bright idea to make open() do double duty.
> 
> The main source of confusion I foresee if we re-introduce it,
> is that people are now used to doing 'with open()...', so we
> either make open() no longer a context manager and break
> existing code, or have two ways to do it, with the one that is
> currently the most widely used one having a subtle trap hidden
> in it.

I wonder if a general mechanism for turning badly behaved context manager 
factories into nice ones would be a useful addition to contextlib. something 
like this:

@contextmanager
def deferred_call(f, *args, **kwargs):
    cm = f(*args, **kwargs)
    res = cm.__enter__()
    try:
        yield res
    finally:
        cm.__exit__()

def deferred_caller(f, name=None):
    return lambda *a, **k: deferred_call(f, *a, **k)

opener = deferred_caller(open)
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/M3YFDCLGSLCONYHSYDF47YP6XB7KUA5M/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to