Python 捕捉traceback异常栈信息
捕捉traceback异常栈信息
by:授客 QQ:1033553122
相关函数简介
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异常栈信息的更多相关文章
- python捕捉详细异常堆栈的方法
python中有 try——except 的方法捕获异常,可以获取到异常的种类以及自定义异常, 但是有时候对于debug测试来说,信息不全,比如说 触发异常的具体位置在哪: import traceb ...
- log日志中不打印异常栈的具体信息
问题与分析 最近在查项目的log时发现报了大量的NPE(NullPointerException),诡异的是只log了Exception的类名,却没有具体的堆栈信息,以致于无法对该NPE异常进行准确定 ...
- Python之traceback错误堆栈信息处理
一.Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方法 ...
- Python 处理异常栈模块——traceback 模块
异常捕捉 通常我们在项目中,针对异常的捕捉会使用 try + except,基本形式如下: try: # 主代码 except IndexError as e: # 索引异常时执行这里 logger. ...
- python使用traceback获取详细的异常信息
原创来自:https://blog.csdn.net/mengtao0609/article/details/55049059 python使用traceback获取详细的异常信息 2017年02月1 ...
- Python中获取异常(Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序 ...
- Python中获取异常(try Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... exce ...
- 一文教你读懂Python中的异常信息
正文共:11813 字 2 图 预计阅读时间: 30 分钟 原文:https://realpython.com/python-traceback/ 译者:陈祥安 原文有所改动. 在写 Python 代 ...
- springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动 ...
随机推荐
- python zeros用法实例
编程就是踩坑的过程.今天又踩了一个坑,做个积累吧. 在给数组赋初始值的时候,经常会用到0数组,而Python中,我们使用zero()函数来实现.在默认的情况下,zeros创建的数组元素类型是浮点型的, ...
- python数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- HTML百宝箱(1从0开始)
标准格式(XHTML) l 元素必须正确嵌套 l 元素必须始终关闭 l 元素名和属性名必须小写 l 文档必须有且仅有一个根元素 l 属性值必须使用双引号括起来 l 声明文档为标 ...
- 在IIS Express中配置和启动web site
Step 1 进入 C:\Users\[User]\Documents\IISExpress\config . 编辑applicationhost.config文件 加入站点信息如下: Step2:进 ...
- Android--UI之Button
前言 最近一直在讲androidUI控件的使用方式,这篇博客讲解一下基本上属于用处最广泛的控件之一的Button控件.如果有过其他平台开发经验的程序员,对按钮是不会陌生的.本篇博客首先讲解一下Andr ...
- SpingBoot 属性加载
属性加载顺序 配置属性加载的顺序 开发者工具 `Devtools` 全局配置参数: 单元测试上的 `@TestPropertySource` 注解指定的参数: 单元测试上的 `@SpringBootT ...
- SpringBoot(7) SpringBoot启动方式
第一种启动方式:对含有main方法的类进行 Run As Java Application 第二种方式:对项目“Maven Install” 生成jar包 在target目录下(java -jar ...
- Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ...
- .NET线程池最大线程数的限制-记一次IIS并发瓶颈
.NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...
- vue_drf之多级过滤、排序、分页
一.前端代码 1,父组件free_course.vue <template> <div id="free_course"> <el-container ...