捕捉traceback异常栈信息

 

by:授客 QQ1033553122

相关函数简介

sys.exc_info()

返回包含3个元素(type, value, traceback)的元组,提供关于当前正被处理的异常信息。如果异常没有被处理,返回包含3个None值的元组。

type:存放异常类型(类对象);

Value:获取异常参数(关联的值,或者需要抛出的第二个参数--总是异常类型是个类对象,那该参数总是一个异常类实例)(its associated value or the second argument to raise, which is always a class instance if the exception type is a class object);

traceback:获取traceback对象,记录异常发生点(根源)。

注意:把traceback值赋值给正在处理当前异常的函数中的本地变量,会引发循环引用问题,会影响垃圾回收。用完后需要删除。

参考连接:

https://docs.python.org/2/library/sys.html#sys.exc_info

traceback.extract_stack()

从stack frame提取原始的traceback

参考连接:

https://hg.python.org/cpython/file/8dffb76faacc/Lib/traceback.py#l280

代码演示

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__ = 'shouke'
 
import  sys
import traceback
 
def testfn():
# 定义异常信息模版
traceback_template = '''Traceback (most recent call last):
         File "%(filename)s", line %(lineno)s, in %(name)s
     %(type)s: %(message)s\n'''
 
try:
var = 5
assert var >0, 'var is larger than zero'
assert var % 2 == 0, 'var is not an even number'
except AssertionError:
        exc_type, exc_value, exc_traceback = sys.exc_info()
 
print('异常类型:', exc_type)
print('关联的值,或者需要raise的第二个参数:', exc_value)
print('异常发生点(根源)', exc_traceback)
 
 
print('--------------------------')
        traceback_details = {
'filename': exc_traceback.tb_frame.f_code.co_filename, #文件名
'lineno' : exc_traceback.tb_lineno, # 发生异常的行数
'name'  : exc_traceback.tb_frame.f_code.co_name, # 所在函数
'type'  : exc_type.__name__, # 异常类型
'message' : exc_value
        }
 
        traceback_info = traceback_template % traceback_details
print(traceback_info)
 
print('--------------------------')
        raw_traceback = traceback.extract_stack()
print(raw_traceback)
 
finally: # 为避免垃圾回收问题需要删除
del (exc_type, exc_value, exc_traceback)
 
testfn()
 

运行结果

"D:\Program Files\python33\python.exe" E:/Projects/interface_project_for_dev/teststudy.py
异常类型:
关联的值,或者需要raise的第二个参数: var is not an even number
异常发生点(根源):
--------------------------
Traceback (most recent call last):
     File "E:/Projects/interface_project_for_dev/teststudy.py", line 17, in testfn
     AssertionError: var is not an even number
 
--------------------------
[('E:/Projects/interface_project_for_dev/teststudy.py', 44, '', 'testfn()'), ('E:/Projects/interface_project_for_dev/teststudy.py', 39, 'testfn', 'raw_traceback = traceback.extract_stack()')]
 
Process finished with exit code 0

Python 捕捉traceback异常栈信息的更多相关文章

  1. python捕捉详细异常堆栈的方法

    python中有 try——except 的方法捕获异常,可以获取到异常的种类以及自定义异常, 但是有时候对于debug测试来说,信息不全,比如说 触发异常的具体位置在哪: import traceb ...

  2. log日志中不打印异常栈的具体信息

    问题与分析 最近在查项目的log时发现报了大量的NPE(NullPointerException),诡异的是只log了Exception的类名,却没有具体的堆栈信息,以致于无法对该NPE异常进行准确定 ...

  3. Python之traceback错误堆栈信息处理

    一.Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方法 ...

  4. Python 处理异常栈模块——traceback 模块

    异常捕捉 通常我们在项目中,针对异常的捕捉会使用 try + except,基本形式如下: try: # 主代码 except IndexError as e: # 索引异常时执行这里 logger. ...

  5. python使用traceback获取详细的异常信息

    原创来自:https://blog.csdn.net/mengtao0609/article/details/55049059 python使用traceback获取详细的异常信息 2017年02月1 ...

  6. Python中获取异常(Exception)信息

    异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序 ...

  7. Python中获取异常(try Exception)信息

    异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... exce ...

  8. 一文教你读懂Python中的异常信息

    正文共:11813 字 2 图 预计阅读时间: 30 分钟 原文:https://realpython.com/python-traceback/ 译者:陈祥安 原文有所改动. 在写 Python 代 ...

  9. springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息

    一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动 ...

随机推荐

  1. Spring Boot 主类及目录结构介绍

    Spring Boot 与传统项目最大的区别是,传统项目都是打成 WAR 包部署到服务器上面,需要额外的 Servlet 容器, 而 Spring Boot 则可以直接打成 jar 包,并内置集成了 ...

  2. 4-3 组件参数校验与非props特性

    本文参考脚本之家,https://www.jb51.net/article/143466.htm 通过属性的形式,父组件对子组件进行参数的传递 //如下图: //父组件设置content属性,向属性中 ...

  3. python搭建web服务

    import json from urlparse import parse_qs from wsgiref.simple_server import make_server import os im ...

  4. springBoot(11)---整合Active消息队列

    Springboot整合Active消息队列 简单理解: Active是Apache公司旗下的一个消息总线,ActiveMQ是一个开源兼容Java Message Service(JMS) 面向消息的 ...

  5. mysql 导入 CSV文件命令行 ERROR 13 (HY000): Can't get stat of

    一定要查看好CSV字段结构是否和文件的表结构字段一致 load data local infile 'F:/MySqlData/test1.csv' --CSV文件存放路径 into table st ...

  6. SLG手游Java服务器的设计与开发——架构分析

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  7. hashMap的hashCode() 和equal()的使用

    hashMap的hashCode() 和equa()的使用 在java的集合中,判断两个对象是否相等的规则是: ,判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等,完毕 如果相 ...

  8. 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

    答曰,是为了防止用加了is前缀命名的变量造成序列化与反序列不一致的问题

  9. 一张图读懂PBN飞越转弯衔接DF航段计算

    飞越转弯衔接TF航段时,转弯外边界与旁切转弯相似,只是在拐角位置直接以风螺旋绘制外边界,大部分切点可以精确计算得到. 飞越转弯衔接DF航段时,转弯外边界全部由风螺旋和它的切线构成,又会有哪些神奇的事情 ...

  10. 翻译:SELECT INTO语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:SELECT INTO的译文. 原文:https://mariadb.com/kb/en/selectinto/我提交到MariaDB官方手册的译文:https://ma ...