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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律