Catching a specific IO error
Michael Hoffman
cam.ac.uk at mh391.invalid
Tue Apr 24 15:18:46 EDT 2007
Steven Howe wrote:
> Steve Holden wrote:
>> Thomas Krüger wrote:
>>
>>> Tina I schrieb:
>>>
>>>> Now, this works but of course it catches every IOError, and I can not
>>>> figure out how to restrict it to only catch the "[Errno 2]"?
>>>>
>>> There's an example that uses the error number:
>>> http://docs.python.org/tut/node10.html#SECTION0010300000000000000000
>>>
>>>
>> So what you'll need to do is catch all IOError exceptions, then test
>> to see if you've got (one of) the particular one(s) you are interested
>> in. If not then you can re-raise the same error with a bare "raise"
>> statement, and any containing exception handlers will be triggered. If
>> there are none then you will see the familiar traceback termination
>> message.
>>
>> regards
>> Steve
>>
> you could also use some pre-testing of the filename os.path.isfile,
> os.path.isdir, os.path.split are good
> functions to test file/directory existence. Also to verify that you have
> permission to manipulate a file, os.access is a good function.
The try first approach is better for at least two reasons:
1) It saves you an extra stat() on the disk, which can be really
important for some filesystems I use :)
2) It is atomic. If os.path.isfile() returns True but the file is
deleted before you open it, you are still going to have to handle the
exception.
--
Michael Hoffman
More information about the Python-list
mailing list