How to get the errno of an IOError?

jr0d picture jr0d · Jul 16, 2009 · Viewed 61.8k times · Source

C has perror and errno, which print and store the last error encountered. This is convenient when doing file io as I do not have to fstat() every file that fails as an argument to fopen() to present the user with a reason why the call failed.

I was wondering what is the proper way to grab errno when gracefully handling the IOError exception in python?

In [1]: fp = open("/notthere")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

/home/mugen/ in ()

IOError: [Errno 2] No such file or directory: '/notthere'


In [2]: fp = open("test/testfile")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

/home/mugen/ in ()

IOError: [Errno 13] Permission denied: 'test/testfile'


In [5]: try:
   ...:     fp = open("nothere")
   ...: except IOError:
   ...:     print "This failed for some reason..."
   ...:     
   ...:     
This failed for some reason...

Answer

stefanw picture stefanw · Jul 16, 2009

The Exception has an errno attribute:

try:
    fp = open("nothere")
except IOError as e:
    print(e.errno)
    print(e)