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 获得13位unix时间戳的方法
Oct 20 Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 Python
python写入已存在的excel数据实例
May 03 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
python进行两个表格对比的方法
Jun 27 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
Python subprocess库的使用详解
Oct 26 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 Python
python Pexpect模块的使用
Dec 25 Python
python实现图片转字符画
Feb 19 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php的常量和变量实例详解
2017/06/27 PHP
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
Python中的filter()函数的用法
2015/04/27 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python win32 简单操作方法
2017/05/25 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python奇偶行分开存储实现代码
2018/03/19 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
乡村文明行动实施方案
2014/03/29 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
Python作用域和名称空间的详细介绍
2022/04/13 Python