Generic catch for python
Question:
I have some extremely weird behavior that seems to result in silent exceptions. How can I write a general try catch where I can debug all exceptions. Something along the lines of:
try:
# something that fails
except e:
print e
A bit more about the problem at hand in detail:
I have a Django app that on my computer (Ubuntu Linux 8.10) works fine both through runserver and mod-python. On the deploy server (Ubuntu Linux 8.10) it works fine through runserver, but fails via apache in mod-python.
I have reduced the cause down to a part off the app that uses Berkeley DB (bsddb.db), and secondary keys. The callback method for secondary keys uses pickle to format the keys. It fails when I call pickle on a single value. However, it only fails when I use cPickle, and using pickle on the same values outside the callback function also works.
I just want to know why it fails with cPickle.
Answers:
Does this work? :
except BaseException, e:
The traceback module is quite useful for formatting tracebacks. You can then write it to a logfile.
Exceptions are already printed by default before program termination. If you want to send the error somewhere else (not print it) you can do this:
try:
something()
except Exception as e:
send_somewhere(traceback.format_exception(*sys.exc_info()))
raise # reraises the exception
note that this format using the as
keyword is for python > 2.6. The old way was:
except Exception, e:
I have some extremely weird behavior that seems to result in silent exceptions. How can I write a general try catch where I can debug all exceptions. Something along the lines of:
try:
# something that fails
except e:
print e
A bit more about the problem at hand in detail:
I have a Django app that on my computer (Ubuntu Linux 8.10) works fine both through runserver and mod-python. On the deploy server (Ubuntu Linux 8.10) it works fine through runserver, but fails via apache in mod-python.
I have reduced the cause down to a part off the app that uses Berkeley DB (bsddb.db), and secondary keys. The callback method for secondary keys uses pickle to format the keys. It fails when I call pickle on a single value. However, it only fails when I use cPickle, and using pickle on the same values outside the callback function also works.
I just want to know why it fails with cPickle.
Does this work? :
except BaseException, e:
The traceback module is quite useful for formatting tracebacks. You can then write it to a logfile.
Exceptions are already printed by default before program termination. If you want to send the error somewhere else (not print it) you can do this:
try:
something()
except Exception as e:
send_somewhere(traceback.format_exception(*sys.exc_info()))
raise # reraises the exception
note that this format using the as
keyword is for python > 2.6. The old way was:
except Exception, e: