traceback sys.exc_info() logging
import logging,traceback,sys
logging.basicConfig(level=logging.WARNING,filename='c:/uiop.txt',filemode='a',
                    format='%(lineno)s %(pathname)s %(asctime)s %(funcName)s %(levelname)s \n%(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %z %j')
def f():
    raise NameError('f NameError')
def main():
    try:
        f()
    except Exception as e:
        exc_type,exc_value,exc_traceback_obj=sys.exc_info()
        print(type(exc_traceback_obj),type(e))  # exc_traceback_obj <class 'traceback'> e <class 'NameError'>
        # print('exc_type %s' % exc_type)
        # print('exc_value %s' % exc_value)
        # print('exc_traceback_obj %s' % exc_traceback_obj)
        # ff=open(file='c:/ppp.txt',mode='wt+')
        # traceback.print_tb(exc_traceback_obj,file=ff)
        # traceback.print_exc(limit=None,file=ff)
        # traceback.print_exception(exc_type,exc_value,exc_traceback_obj,limit=None,file=ff)
        # file ( sys.stdout,sys.stderr,ff)
        # ff.flush()
        # ff.close()
        # print(traceback.format_tb(exc_traceback_obj))  # list
        # print(traceback.format_exc(limit=None))  # str
        # print(traceback.format_exception(exc_type,exc_value,exc_traceback_obj,limit=None))  # list
        # traceback.print_tb(exc_traceback_obj)  # lack Traceback (most recent call last) & exc_type: exc_value
        # traceback.print_exc(limit=None,file=None)
        # traceback.print_exception(exc_type,exc_value,exc_traceback_obj,file=sys.stderr)
        # logging.error(traceback.format_tb(exc_traceback_obj,limit=None))  # list
        # logging.warning(traceback.format_exc(limit=None))  # str normal format
        # logging.critical(traceback.format_exception(exc_type,exc_value,exc_traceback_obj,limit=None))  # list
if __name__ == '__main__':
    main()
捕获线程异常
import threading,traceback
def f():
    raise BaseException('threading Exception')
class ExceptionThread(threading.Thread):
    def __init__(self,group=None,target=None,name=None,args=(),kwargs=None,verbose=None):
        threading.Thread.__init__(self,group,target,name,args,kwargs)
        if kwargs is None:
            kwargs={}
        self._target=target
        self._args=args
        self._kwargs=kwargs
        self._exc=None
    def run(self):
        try:
            if self._target:
                self._target()
        except BaseException as e:
            import sys
            self._exc=sys.exc_info()
        finally:
            del self._target,self._args,self._kwargs
    def join(self):
        threading.Thread.join(self)
        if self._exc:
            msg='Thread "%s" threw an exception: %s' % (self.getName(),self._exc[1])
            new_exc=Exception(msg)
            raise new_exc.__class__(new_exc).with_traceback(self._exc[2])
t=ExceptionThread(target=f,name='f thread')
t.start()
try:
    t.join()
except:
    traceback.print_exc()
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号