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

目录
相关文章
|
1月前
|
Python
Python编程获取当前日期的所属周日期信息
Python编程获取当前日期的所属周日期信息
|
28天前
|
存储 索引 Python
|
19天前
|
存储 数据采集 数据库
用 Python 爬取淘宝商品价格信息时需要注意什么?
使用 Python 爬取淘宝商品价格信息时,需注意法律和道德规范,遵守法律法规和平台规定,避免非法用途。技术上,可选择 Selenium 和 Requests 库,处理反爬措施如 IP 限制、验证码识别和请求频率控制。解析页面数据时,确定数据位置并清洗格式。数据存储可选择 CSV、Excel、JSON 或数据库,定期更新并去重。还需进行错误处理和日志记录,确保爬虫稳定运行。
|
19天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
22天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
29天前
|
Python
Python生成器、装饰器、异常
【10月更文挑战第15天】
|
1月前
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
61 13
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
22 1
|
1月前
|
小程序 Python
利用Python编程提取身份证的信息
利用Python编程提取身份证的信息
|
1月前
|
IDE 开发工具 数据安全/隐私保护
Python编程--实现用户注册信息写入excel文件
Python编程--实现用户注册信息写入excel文件