Ian Beaver <undercoverid...@gmail.com> added the comment: I found that the workaround suggested doesn't work when you have a subclass of threading.Thread and you want to catch everything in the module that contains the class to a common log.
Say you have a module with a socket server that spawns a thread on accept and you want to log anything that tracebacks in the module. This seems to work: import sys import logging from functools import wraps def myExceptHook(type, value, tb): """ Redirect tracebacks to error log """ import traceback rawreport = traceback.format_exception(type, value, tb) report = '\n'.join(rawreport) log.error(report) sys.excepthook = myExceptHook def use_my_excepthook(view): """ Redirect any unexpected tracebacks """ @wraps(view) def run(*args, **kwargs): try: return view(*args, **kwargs) except: sys.excepthook(*sys.exc_info()) return run Then in your thread subclass: class MyThread(threading.Thread): def __init__(self, socket_conn): threading.Thread.__init__(self) self.my_conn = socket_conn @use_my_excepthook def run(self): """ Do stuff """ ---------- nosy: +undercoveridiot _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue1230540> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com