[Python-Dev] Exception Reorg PEP checked in

Wilfredo Sánchez Vega wsanchez at apple.com
Thu Sep 8 02:06:08 CEST 2005


   (sorry for the delayed reply; vacation)

On Aug 14, 2005, at 12:27 PM, Guido van Rossum wrote:

> On 8/14/05, Michael Hudson <mwh at python.net> wrote:
>
>> Wilfredo Sánchez Vega <wsanchez at wsanchez.net> writes:
>>
>>>    I'm curious about why Python lacks FileNotFoundError,
>>> PermissionError and the like as subclasses of IOError.
>>
>> Good question.  Lack of effort/inertia?
>
> Well, I wonder how often it's needed. My typical use is this:
>
> try:
>     f = open(filename)
> except IOError, err:
>     print "Can't open %s: %s" % (filename, err)
>    return
>
> and the error printed contains all the necessary details (in fact it
> even repeats the filename, so I could probably just say "print err").

   That's fine for log output, but weak for handling the error.

> Why do you need to know the exact reason for the failure? If you
> simply want to know whether the file exists, I'd use os.path.exists()
> or isfile(). (Never mind that this is the sometimes-frowned-upon
> look-before-you-leap; I think it's often fine.)

   If you're going to wave off the look-before-you-leap argument, I  
guess you're right in that case, but I think it's a pretty valid  
argument for a lot of applications.  os.path.exists() also has a race  
condition in the case where the file is deleted between your test for  
is and the subsequent attempt to access it, so you'd still need to  
handle that error in the exception handling if you care about  
correctness.

   I agree that in many (most?) cases, this can be fudged, but if  
it's easier to do the correct thing, more people would do the correct  
thing.

   In any case, os.path.exists() also doesn't catch permissions  
errors, and I often find myself wanting to handle those errors  
specially as well.

   An example where both are useful is in an HTTP server, where a  
different status code should be returned to the client depending on  
success, file not found, permission denied, and other cases.   
Presently, I (and twisted.web) have to check errno in the IOError  
exception handler, which is really clunky, and I have to do it fairly  
often.

> Also note that providing the right detail can be very OS specific.
> Python doesn't just run on Unix and Windows.

   File not found is a detectable error case on all platforms, I  
think.  On an OS that doesn't have permissions errors, I wouldn't  
expect the existence of an exception that isn't used to be a huge  
portability problem.  I can't imagine that checking errno is a more  
portable solution.

   These two exist and are quite useful in Java, for whatever that's  
worth.

     -wsv

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3057 bytes
Desc: not available
Url : http://mail.python.org/pipermail/python-dev/attachments/20050907/241d7cd0/smime-0001.bin


More information about the Python-Dev mailing list