基于python traceback实现异常的获取与处理


Posted in Python onDecember 13, 2019

这篇文章主要介绍了基于python traceback实现异常的获取与处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

去看看实现

测试代码如下:

def func(a, b):
  return a / b


if __name__ == '__main__':
  import sys
  import time
  import traceback

  try:
    func(1, 0)
  except Exception as e:
    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())

运行结果:

*** <class 'ZeroDivisionError'> division by zero ***


***traceback.print_exc():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero


***traceback.format_exc():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero


***traceback.print_exception():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero

可以看出,三种方式打印结果是一样的。在开发时,做调试是很方便的。也可以把这种异常栈写入日志。

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)
  except Exception as e:
    import cgitb
    cgitb.enable(format='text')
    func(1, 0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程之event对象的用法实例分析
Mar 23 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
python 实现批量替换文本中的某部分内容
Dec 13 #Python
django多种支付、并发订单处理实例代码
Dec 13 #Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 #Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 #Python
使用python去除图片白色像素的实例
Dec 12 #Python
用Python去除图像的黑色或白色背景实例
Dec 12 #Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 #Python
You might like
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
关于手调机和数调机的选择
2021/03/02 无线电
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
node中的cookie的具体使用
2018/09/13 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python设置值及NaN值处理方法
2018/07/03 Python
Python中关于浮点数的冷知识
2019/09/22 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
写给女朋友的检讨书
2015/05/06 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis