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 08 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
python写入xml文件的方法
May 08 Python
Unicode和Python的中文处理
Mar 19 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
Python配置pip国内镜像源的实现
Aug 20 Python
Django扫码抽奖平台的配置过程详解
Jan 14 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
德生1994机评
2021/03/02 无线电
使用PHP的日期与时间函数技巧
2008/04/24 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jquery移动节点实例
2015/01/14 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
浅析Python中的多重继承
2015/04/28 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python框架flask表单实现详解
2019/11/04 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
Python 可视化神器Plotly详解
2020/12/26 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
数组越界问题
2015/10/21 面试题
中学生班主任评语
2014/01/30 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
物业接待员岗位职责
2015/04/15 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python