[Tutor] Error handling

Mark Lawrence breamoreboy at yahoo.co.uk
Sun Mar 25 18:00:42 CEST 2012


On 25/03/2012 08:22, Russel Winder wrote:
> Michael,
>
> On Sat, 2012-03-24 at 15:20 -0700, Michael Lewis wrote:
> [...]
>
> It is perhaps worth noting that in Python 3, the syntax has changed:
>
>> import os, errno
>> try:
>>
>>      os.makedirs('a/b/c')
>> except OSError, e:
>
> except OSError as e :
>
>>
>>      if e.errno != errno.EEXIST:
>>
>>          raise
>
> This "as" syntax works in 2.6 and 2.7 so is probably the syntax to use
> unless you have to use very old versions of Python.  I think the "as"
> syntax makes it clearer that e is a variable referring to the instance
> of OSError that causes the except clause to execute if it does.
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor

It's worth noting that PEP 3151 has been implemented in Python 3.3 see 
http://docs.python.org/dev/whatsnew/3.3.html#pep-3151-reworking-the-os-and-io-exception-hierarchy

Quoting from the above link.

"Thanks to the new exceptions, common usages of the errno can now be 
avoided. For example, the following code written for Python 3.2:

from errno import ENOENT, EACCES, EPERM

try:
     with open("document.txt") as f:
         content = f.read()
except IOError as err:
     if err.errno == ENOENT:
         print("document.txt file is missing")
     elif err.errno in (EACCES, EPERM):
         print("You are not allowed to read document.txt")
     else:
         raise

can now be written without the errno import and without manual 
inspection of exception attributes:

try:
     with open("document.txt") as f:
         content = f.read()
except FileNotFoundError:
     print("document.txt file is missing")
except PermissionError:
     print("You are not allowed to read document.txt")
"

-- 
Cheers.

Mark Lawrence.



More information about the Tutor mailing list