捕捉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. KNN和SVM的区别和联系

    先从两者的相同点来看吧,两者都是比较经典的机器学习分类算法,都属于监督学习算法,都对机器学习的算法选择有着重要的理论依据. 区别: 1 KNN对每个样本都要考虑.SVM是要去找一个函数把达到样本可分. ...

  2. 程序员IT计算机中常见英语单词

    abstract 抽象的 abstract base class (ABC)抽象基类 abstract class 抽象类 abstraction 抽象.抽象物.抽象性 access 存取.访问 ac ...

  3. 漫谈golang之fmt格式化模块

    fmt 漫谈 Go Walkthrough: fmt fmt常用的格式化字符串 %v 是个通用的占位符.它会自动将变量转换为默认格式的字符串,这在打印字符串或数字等原语时非常有用,而且不需要特定的选项 ...

  4. Docker学习之1—基础及安装

    Docker介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  5. IdentityServer(13)- 使用 JavaScript 客户端

    本文使用的授权码模式,已更新至 .NET Core 2.2 本快速入门将展示如何构建基于浏览器的 JavaScript 客户端应用程序(SPA). 用户将登录 IdentityServer,使用 Id ...

  6. [python]使用virtualenvWrapper

    什么是virtualenv virtualenv是python的环境管理工具,用于隔离python的运行环境.也就是说,一个项目可以有一个属于这个项目的运行环境,从而避免了因为依赖不同的模块而产生的错 ...

  7. python 备忘

    import jsonu='''{ "maps": [ { "id": "blabla", "iscategorical" ...

  8. Linux C 实现一个简单的线程池

    线程池的定义 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如 ...

  9. npoi实现数据导出Excel

    npoi     .NET第三方的Office功能组件. 链接地址 http://npoi.codeplex.com/ 引用命名空间 using NPOI.HSSF.UserModel; using ...

  10. Oracle高效分页查询(转)

    page --没有order by的查询 -- 嵌套子查询,两次筛选(推荐使用) --SELECT * -- FROM (SELECT ROWNUM AS rowno, t.* -- FROM DON ...