Dealing with exceptions

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Mar 2 20:41:20 EST 2013


On Sat, 02 Mar 2013 11:35:13 -0800, bvdp wrote:


>> IOError and OSError should cover all copy problems, I think.
> 
> How do you know that? I can figure it out as well by running the
> program, but I'd like to make the determination of what to catch when
> I'm writing the code.


In my experience, I would say:

20% by reading the documentation, 20% by experience, and 60% by 
experimentation at the interactive interpreter.

Generally if you read the docs, you will get some idea of the exceptions 
you can expect to get. E.g. the docs for open claim:

"Raise IOError upon failure."

(call "help(open)" in the interactive interpreter).

Experience and experimentation come into it in the (unfortunately very 
common case) where the docs don't describe the exceptions you can expect.

For the specific case of IOError and OSError, another very useful skill 
is googling for the specific errno you can test for:

try:
    something()
except IOError as e:
    if e.errno == whatever:
        do_this()
    else:
        raise


In Python 3.3, this becomes much nicer with individual exceptions for the 
most common errnos.


-- 
Steven



More information about the Python-list mailing list