基于python traceback实现异常的获取与处理
这篇文章主要介绍了基于pythontraceback实现异常的获取与处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1、traceback.print_exc()
2、traceback.format_exc()
3、traceback.print_exception()
简单说下这三个方法是做什么用的:
1、print_exc():是对异常栈输出
2、format_exc():是把异常栈以字符串的形式返回,print(traceback.format_exc())就相当于traceback.print_exc()
3、print_exception():traceback.print_exc()实现方式就是traceback.print_exception(sys.exc_info()),可以点sys.exc_info()进
去看看实现
测试代码如下:
deffunc(a,b): returna/b if__name__=='__main__': importsys importtime importtraceback try: func(1,0) exceptExceptionase: print('***',type(e),e,'***') time.sleep(2) print("***traceback.print_exc():***") time.sleep(1) traceback.print_exc() time.sleep(2) print("***traceback.format_exc():***") time.sleep(1) print(traceback.format_exc()) time.sleep(2) print("***traceback.print_exception():***") time.sleep(1) traceback.print_exception(*sys.exc_info())
运行结果:
***divisionbyzero*** ***traceback.print_exc():*** Traceback(mostrecentcalllast): File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line42,in func(1,0) File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line33,infunc returna/b ZeroDivisionError:divisionbyzero ***traceback.format_exc():*** Traceback(mostrecentcalllast): File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line42,in func(1,0) File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line33,infunc returna/b ZeroDivisionError:divisionbyzero ***traceback.print_exception():*** Traceback(mostrecentcalllast): File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line42,in func(1,0) File"E:/HttpRunnerManager-jh/ApiManager/tests.py",line33,infunc returna/b ZeroDivisionError:divisionbyzero
可以看出,三种方式打印结果是一样的。在开发时,做调试是很方便的。也可以把这种异常栈写入日志。
logging.exception(ex) #指名输出栈踪迹,logging.exception的内部也是包了一层此做法 logging.error(ex,exc_info=1) #更加严重的错误级别 logging.critical(ex,exc_info=1) #我直接copy的,未尝试。有时间会试下的
python还有一个模块叫cgitb,输出的error非常详情。
try: func(1,0) exceptExceptionase: importcgitb cgitb.enable(format='text') func(1,0)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。