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 04 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
python中的计时器timeit的使用方法
Oct 20 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
Python之reload流程实例代码解析
Jan 29 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python查找文件中包含中文的行方法
Dec 19 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
django 模型字段设置默认值代码
Jul 15 Python
Python使用pyecharts控件绘制图表
Jun 05 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代码
2012/06/08 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
React实现轮播效果
2020/08/25 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
2020/12/19 Vue.js
python中zip()方法应用实例分析
2016/04/16 Python
git进行版本控制心得详谈
2017/12/10 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python列表解析配合if else的方法
2018/06/23 Python
python3安装speech语音模块的方法
2018/12/24 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
NumPy中的维度Axis详解
2019/11/26 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python字典key不能是可以是啥类型
2020/08/04 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
总裁助理岗位职责
2014/02/17 职场文书
在校实习生求职信
2014/06/18 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
受资助学生感谢信
2015/01/21 职场文书
2019思想汇报范文
2019/05/21 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书