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编写暴力破解FTP密码小工具
Nov 19 Python
Django发送html邮件的方法
May 26 Python
Python中for循环控制语句用法实例
Jun 02 Python
Tensorflow简单验证码识别应用
May 25 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
pandas计数 value_counts()的使用
Jun 24 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
使用Python构造hive insert语句说明
Jun 06 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
python之随机数函数的实现示例
Dec 30 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
基于mysql的论坛(7)
2006/10/09 PHP
discuz7 phpMysql操作类
2009/06/21 PHP
PHP内核探索:变量概述
2014/01/30 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
numpy添加新的维度:newaxis的方法
2018/08/02 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python处理session的方法整理
2019/08/29 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
python3 logging日志封装实例
2020/04/08 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
消防应急演练方案
2014/02/12 职场文书
元宵节主持词
2014/03/25 职场文书
高中家长寄语
2014/04/02 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
岳麓书院导游词
2015/02/03 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书