OSError's filename attribute unavailable?

Alex58 picture Alex58 · Jan 13, 2011 · Viewed 14k times · Source

I have the following code:

except(OSError) as (errno, strerror, filename):
print "OSError [%d]: %s at %s" % (errno, strerror, filename)

It runs great unless it meets OSError num. 123 (The file name, directory name, or volume label syntax is incorrect). then I get the following error at the except code line:

ValueError: need more than 2 values to unpack

It is solved by not using the filename attribute. However my requirements prevent me from not using this attribute.

Is there another way?

Answer

Senthil Kumaran picture Senthil Kumaran · Jan 13, 2011

I have not seen this kind of Exception handling where you are passing the Exception object's attributes to the as clause.

Normally you handle except ExceptionObject as e and handle the attributes as one would normally handle the attributes of an object.

OSError contains a errno attribute is a numeric error code from errno, and the strerror attribute is the corresponding string and for exceptions that involve a file system path (such as chdir() or unlink()), the exception instance will contain a third attribute, filename, which is the file name passed to the function.

import os
try:
    os.chdir('somenonexistingdir')
except OSError as e:
    print e.errno
    print e.filename
    print e.strerror