Python捕获异常堆栈信息的几种方法(小结)


Posted in Python onMay 18, 2020

程序出错的时候,我们往往需要根据异常信息来找到具体出错的代码。简单地用print打印异常信息并不能很好地追溯出错的代码:

# -*- coding: utf-8 -*-
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    print(repr(e))
 
if __name__ == '__main__':
  main()

输出:

ValueError('test',)

打印的异常信息不够详细,对错误追踪没有多大帮助。这时候异常堆栈信息就派上用场了。下面简单介绍几种打印异常堆栈信息的方法。

1.最简单的方法之一就是使用logging.exception

# -*- coding: utf-8 -*-
import logging
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    logging.exception(e)
 
if __name__ == '__main__':
  main()

输出:

ERROR:root:test
Traceback (most recent call last):
  File "E:/git_work/scrapy_ppt/test.py", line 16, in main
    bar(100)
  File "E:/git_work/scrapy_ppt/test.py", line 11, in bar
    print('a + 100:', foo(a, 100))
  File "E:/git_work/scrapy_ppt/test.py", line 6, in foo
    raise ValueError('test')
ValueError: test

从异常堆栈信息中我们可以不费力气就找出错误代码是哪一行。

2.其它方法:

# -*- coding: utf-8 -*-
import traceback
import sys
 
 
def foo(a, b):
  c = a + b
  raise ValueError('test')
  return c
 
 
def bar(a):
  print('a + 100:', foo(a, 100))
 
 
def main():
  try:
    bar(100)
  except Exception as e:
    # 方法二
    traceback.print_exc()
 
    # 方法三
    msg = traceback.format_exc()
    print(msg)
 
    et, ev, tb = sys.exc_info()
    # 方法四
    traceback.print_tb(tb)
 
    # 方法五
    traceback.print_exception(et, ev, tb)
 
    # 方法六
    msg = traceback.format_exception(et, ev, tb)
    for m in msg:
      print(m)
 
if __name__ == '__main__':
  main()

到此这篇关于Python捕获异常堆栈信息的几种方法(小结)的文章就介绍到这了,更多相关Python捕获异常堆栈信息内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
Python中实现对list做减法操作介绍
Jan 09 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Django中提供的6种缓存方式详解
Aug 05 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Pandas读取csv时如何设置列名
Jun 02 Python
python2和python3哪个使用率高
Jun 23 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 #Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 #Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 #Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 #Python
django queryset相加和筛选教程
May 18 #Python
python中JWT用户认证的实现
May 18 #Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 #Python
You might like
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
js使用递归解析xml
2014/12/12 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
为Python的web框架编写前端模版的教程
2015/04/30 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Python高斯消除矩阵
2019/01/02 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python递归实现打印多重列表代码
2020/02/27 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
我是特种兵观后感
2015/06/11 职场文书
初一数学教学反思
2016/02/17 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB