zl程序教程

您现在的位置是:首页 >  其它

当前栏目

traceback sys.exc_info() logging

sys INFO logging
2023-09-11 14:16:16 时间

  

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