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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
python学习必备知识汇总
Sep 08 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python反射的用法实例分析
Feb 11 Python
详解python中的Turtle函数库
Nov 19 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python 代码调试技巧示例代码
Aug 11 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
php 删除无限级目录与文件代码共享
2008/11/22 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
vue实现商城购物车功能
2017/11/27 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
Python中用Spark模块的使用教程
2015/04/13 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
SQL Server面试题
2013/04/04 面试题
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
门卫工作岗位职责
2013/12/17 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
青年文明号汇报材料
2014/12/23 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
邀请函模板
2015/02/02 职场文书
二胎满月酒致辞
2015/07/29 职场文书
辞职申请书范本
2019/05/20 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL