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 Socket编程入门教程
Jul 11 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
python实现员工管理系统
Jan 11 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
详解python 注释、变量、类型
Aug 10 Python
python 求定积分和不定积分示例
Nov 20 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
基于Python把网站域名解析成ip地址
May 25 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
python绘图模块之利用turtle画图
Feb 12 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函数实现判断是否移动端访问
2015/03/03 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
完美的php分页类
2017/10/24 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
实例讲解python函数式编程
2014/06/09 Python
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python递归函数用法详解
2020/10/26 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
保护环境倡议书500字
2014/05/19 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
社保转移委托书范本
2014/10/08 职场文书
离婚协议书范文2015
2015/01/26 职场文书
工作感言一句话
2015/08/01 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python