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获取当前日期和时间的方法
Apr 30 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python3.6简单反射操作示例
Jun 14 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
python安装sklearn模块的方法详解
Nov 28 Python
Python-split()函数实例用法讲解
Dec 18 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之curl设置超时实例
2014/11/03 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
python使用str & repr转换字符串
2016/10/13 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python中按键来获取指定的值
2019/03/02 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
技校毕业生个人学习的自我评价
2014/02/21 职场文书
环保倡议书怎么写
2014/05/16 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
长城英文导游词
2015/01/30 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技