On 30/07/2019 00:07:52, Guido van Rossum wrote:
On Mon, Jul 29, 2019 at 3:51 PM Eric Fahlgren <ericfahlg...@gmail.com <mailto:ericfahlg...@gmail.com>> wrote:

    On Mon, Jul 29, 2019 at 2:58 PM Guido van Rossum <gu...@python.org
    <mailto:gu...@python.org>> wrote:

        I am *guessing* the problem here is something like this:

        with open(filename) as f:
            data = f.read()

        raises an exception if the open() call fails, but putting
        try... except IOError: ... around the whole thing also catches
        I/O errors in the read() call (or anything else you might put
        in the body). Other solutions are more verbose and run other
        risks. For other types of context managers it may be worse
        because the error you want to catch occurs in the __enter__()
        call that's implicit in the with-clause (for open(),
        __enter__() is just "return self" since all the work happens
        before).


    Isn't the appropriate solution to that one as follows?  It's
    pretty clear what you're trying to do, so the extra couple of
    lines aren't all that obtrusive.

    try:
        f = open('x', 'r')
    except IOError as whatever:
        handle whatever
    else:
        with f:
            data = f.read()


It's quite verbose though. And it makes you think "oh, I don't need `with`, I can use `finally: f.close()`" -- until the IOError hits and you get `UnboundLocalError: f`...
Hm, I'm not sure why you would be more likely to think that in this example than anywhere else where you use an open() context manager. (Observation: I think once you start using context managers, you appreciate their advantages and are unlikely to remove one from your code without good reason.  This is certainly a rite of passage I went through with open().) I believe the/a motivation for Serhiy's proposal is to write really robust code, e.g. in a program that must not fail such as a network server serving multiple clients. ISTM this is a worthwhile goal, and at present the only way to achieve it is with somewhat verbose and clunky code.
_______________________________________________
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/4GBGCOSNWOS6BABWGWYVPE4SWQGKHPGR/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to