Python 捕捉traceback异常栈信息

简介: Python 捕捉traceback异常栈信息

捕捉traceback异常栈信息

 


相关函数简介

sys.exc_info()

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

 

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

目录
相关文章
|
7月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
856 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
3月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
3月前
|
数据安全/隐私保护 数据格式 Python
快递单号模拟生成器, 虚拟物流信息在线生成,虚假快递单号生成器【python】
支持多种主流快递公司生成符合各快递公司规则的快递单号自动生成收发件人信息
|
3月前
|
JSON 前端开发 API
快递单号生成器在线, 快递单号模拟生成器, 虚拟物流信息在线生成【python】
项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面
|
3月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
161 0
|
4月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
80 1
|
5月前
|
人工智能 C# Python
处理python异常
本文介绍了Python中的异常处理机制,并实现了一个简单的异常装饰器。通过`try/except`语句捕获异常,结合`finally`子句完成清理工作。为进一步优化代码结构,文章提出了使用装饰器处理异常的方法,避免函数中大量冗长的异常处理语句。通过类封装异常装饰器,多个函数可共享异常处理逻辑,提升代码简洁性和可维护性。总结强调了装饰器在异常处理中的优势,使代码更加优雅高效。
126 27
|
4月前
|
数据采集 存储 数据可视化
Python爬取招标信息并生成可视化分析报告
Python爬取招标信息并生成可视化分析报告
|
8月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1159 82
|
6月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
169 23

推荐镜像

更多