Peter J. Holzer wrote:
On 2019-11-04 18:18:39 -0300, Luciano Ramalho wrote:

In addition, as Rob said, it is usually a bad idea to wrap several
lines of code in a single try/except block


I disagree with this. While it is sometimes useful to wrap a single
line, in my experience it rarely is. The scope of the try ... except
should be a unit from a semantic point of view. For example, if you
open a file and write some data to it, you could write:

    try:
        f = open("a.file", "w")
    except OSError as e:
        ... handle exception
    try:
        f.write("some")
    except OSError as e:
        ... handle exception
    try:
        f.write("data")
    except OSError as e:
        ... handle exception
    try:
        close(f)
    except OSError as e:
        ... handle exception

But not only is this hard to read and ugly as heck, what would be the
point?
Much better to write:

    try:
        with open("a.file", "w") as f:
            f.write("some")
            f.write("data")
    except OSError as e:
        ... handle exception

Or maybe don't catch it here at all but just let it bubble up until it
hits a level where dealing with it makes sense from the user's point of
view

Often it makes sense to do both -- catch the exception and
re-raise it with a more informative error message, e.g.

     try:
         with open(filename, "w") as f:
             f.write("some")
             f.write("data")
     except OSError as e:
         raise OSError("Couldn't write fibble data to %s: %s" % (filename, e))

That way you don't get frustrating Microsoft style error
messages which say "The system could not open the specified file"
while giving no clue about *which* file was specified... aarggh!

--
Greg
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to