Catching a specific IO error

Michael Hoffman cam.ac.uk at mh391.invalid
Tue Apr 24 21:18:46 CEST 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