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发布模块的步骤分享
Feb 21 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
python 计算文件的md5值实例
Jan 13 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
Django  ORM 练习题及答案
Jul 19 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Python接口自动化判断元素原理解析
Feb 24 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
JavaScript 指导方针
2007/04/05 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
子页向父页传值示例
2013/11/27 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python中正则表达式的使用方法
2018/02/25 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
诚信考试承诺书
2014/03/27 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014年服务员工作总结
2014/11/18 职场文书
旷工检讨书1000字
2015/01/01 职场文书
招标保密承诺书
2015/01/20 职场文书