Rene Pijlman wrote: > Steven D'Aprano: >> The OP is doing it because catching all exceptions masks bugs. There are >> certain exceptions which should be allowed through, as they indicate a bug >> in the OP's code. Normally the tactic is to catch only the exceptions you >> are interested in, and let everything else through, but the OP needs to >> catch all exceptions because there are rare exceptions which he can't >> predict in advance. > > ... This is in a multithreaded ZODB-application.... > When an unexpected exception occurs and remains uncaught, a thread > terminates, ....
At the base of the thread code, you could put import sys, threading, logging class MyThread(threading.Thread): def run(self): try: threading.Thread.run(self) # or whatever except: etype, error, traceback = sys.exc_info() logging.warning('Exception %s: %s seen at %s' % (etype.__name__, error, _someformat_(traceback))) _try_to_rescue_or remove_this_thread_ If the condition is infrequent enough. If not (if you run a real risk of multiple threads accessing the log simultaneously), have a queue of log messages that you feed to a single logging thread. -- -Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list