On Mon, Nov 18, 2019, at 03:42, Paul Moore wrote:
> The context here has been lost - I've searched the thread and I can't
> find a proper explanation of how open() "misbehaves" in any way that
> seems to relate to this statement (I don't actually see any real
> explanation of any problem with open() to be honest). There's some
> stuff about what happens if open() itself fails, but I don't see how
> that results in a problem (as opposed to something like a subtle
> application error because the writer didn't realise this could
> happen).
> 
> Can someone restate the problem please?

This particular chain of discussion is regarding a proposal to solve the 
problem posed in the original topic by using a parenthesized tuple display, 
i.e. code that looks like the following:

with (open(filename1), open(filename2)) as (file1, file2):
    ...

If there is no special handling for this syntax, this would be equivalent to:

files = (open(filename1), open(filename2))
with files as (file1, file2):
    ...

i.e. the `open` calls are all finished (and throw any exceptions) before the 
tuple is constructed, and therefore its proposed __enter__ method cannot be 
called. This means if open(filename2) fails, it is not protected by the with 
block as it would be normally if the error occurred in the file object's 
__enter__ method, and file1.__exit__() never gets called

The concept of a callable that returns a context manager (whether that is open, 
requests.get, or any other context manager's constructor) and can throw an 
exception is therefore a problem for the tuple.__enter__ proposal which was 
being discussed in this subthread, and generally for any other construct like 
it.
_______________________________________________
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/BOR57AIUICRVBNRUQDHICUMS4SXPX3CA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to