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.
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()