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命令行交互提示符的方法
Jan 14 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
python创建与遍历List二维列表的方法
Aug 16 Python
python实现的汉诺塔算法示例
Oct 23 Python
Django 请求Request的具体使用方法
Nov 11 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
python如何绘制疫情图
Sep 16 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
Django数据库迁移常见使用方法
Nov 12 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
python 制作磁力搜索工具
Mar 04 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接口和抽象类使用示例详解
2014/03/02 PHP
javascript第一课
2007/02/27 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python输入二维数组方法
2018/04/13 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
xxx同志考察材料
2014/02/07 职场文书
四查四看剖析材料
2014/02/14 职场文书
个人委托书格式
2014/04/04 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
个人股份合作协议书
2014/10/24 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
刑事上诉状范文
2015/05/22 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python