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清除指定目录内所有文件中script的方法
Jun 30 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
python中的数据结构比较
May 13 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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简单实现加减乘除计算器
2014/01/06 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
咖啡蛋糕店创业计划书
2014/01/28 职场文书
创先争优承诺书范文
2014/03/31 职场文书
团委竞选演讲稿
2014/04/24 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
同学会演讲稿
2019/04/02 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js