Exception message (Python 2.6)

Aleš Kancilija picture Aleš Kancilija · Nov 11, 2009 · Viewed 83k times · Source

In Python, if I open a binary file that doesn't exist, the program exits with an error and prints:

Traceback (most recent call last):
  File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
  line 4, in <module>
  pkl_file = open('monitor.dat', 'rb')
  IOError: [Errno 2] No such file or directory: 'monitor.dat'

I can handle this with 'try-except', like:

try:
    pkl_file = open('monitor.dat', 'rb')
    monitoring_pickle = pickle.load(pkl_file)
    pkl_file.close()
except Exception:
    print 'No such file or directory'

How could I, in caught Exception, print the following line?

File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
line 11, in <module>
pkl_file = open('monitor.dat', 'rb')

So the program would not exit.

Answer

Ned Batchelder picture Ned Batchelder · Nov 11, 2009

This prints the exception message:

except Exception, e:
    print "Couldn't do it: %s" % e

This will show the whole traceback:

import traceback

# ...

except Exception, e:
    traceback.print_exc()

But you might not want to catch Exception. The narrower you can make your catch, the better, generally. So you might want to try:

except IOError, e:

instead. Also on the subject of narrowing your exception handling, if you are only concerned about missing files, then put the try-except only around the open:

try:
    pkl_file = open('monitor.dat', 'rb')
except IOError, e:
    print 'No such file or directory: %s' % e

monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()