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 类与元类的深度挖掘 I【经验】
May 06 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
Python实现端口检测的方法
Jul 24 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python opencv实现图像配准与比较
2021/02/09 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
面试求职的个人自我评价
2013/11/16 职场文书
竞聘副主任科员演讲稿
2014/01/11 职场文书
小学二年级学生评语
2014/04/21 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
销售顾问工作计划书
2014/08/15 职场文书
数学教师个人工作总结
2015/02/06 职场文书
花田少年史观后感
2015/06/16 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python