9 Python对象-内部类型之帧对象&跟踪记录对象

liftword5个月前 (02-17)技术文章37

帧对象

帧对象:栈帧(Frame)是执行环境的一个抽象表示,是Python的执行栈帧。,它是执行一个函数时创建的。每个栈帧都保存了函数的局部变量、调用参数、返回值以及指向父栈帧的链接(如果有的话,即调用当前函数的栈帧)。

帧对象包含Python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象,本地及全局名称空间字典及当前指令等。每次函数调用产生一个新的帧,每个帧对象都会相应创建一个C语言级别的栈帧。用到帧对象的事跟踪记录对象。

import inspect  
  
def outer_function():  
    x = 10  
    inner_function()  
  
def inner_function():  
    # 获取当前栈帧  
    current_frame = inspect.currentframe()  
    # 获取当前栈帧的上一个栈帧(即调用它的栈帧)  
    outer_frame = current_frame.f_back  
  
    # 打印当前栈帧的局部变量  
    print("Inner function local variables:", current_frame.f_locals)  
    # 打印外部函数的局部变量(通过外部栈帧)  
    print("Outer function local variables:", outer_frame.f_locals)  
  
    # 注意:在Python 3.7及更高版本中,直接访问栈帧的局部变量可能会受到限制或警告  
    # 因为这可能会破坏Python的解释器优化和封装  
  
outer_function()

输出结果:

Inner function local variables: {'current_frame': , 'outer_frame': }
Outer function local variables: {'x': 10}

跟踪记录对象

当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果异常有自己的处理程序,处理程序可以访问这个跟踪记录对象。

import traceback  
  
def divide(x, y):  
    try:  
        result = x / y  
    except Exception as e:  
        # 获取并存储异常的堆栈跟踪信息  
        exc_info = traceback.format_exc()  
        print("Error occurred:", exc_info)  
        # 你可以将exc_info写入日志文件等  
  
divide(10, 0)

关键函数

  1. traceback.print_exc()
  1. traceback.format_exc()
  1. traceback.extract_tb(tb, limit=None)
  1. traceback.format_tb(tb, limit=None)
  1. traceback.format_stack(f=None, limit=None)


traceback.TracebackException 类

从Python 3.5开始,traceback模块引入TracebackException类,它提供了一个更面向对象的接口来处理堆栈跟踪。这个类可以捕获当前的异常堆栈跟踪,并允许你以编程方式访问和格式化它。

  • cebackException实例。你需要提供异常类型、异常值和回溯对象。limit、lookup_lines和capture_locals参数控制堆栈跟踪的生成方式。
  • format(self, *args, **kwargs)类似于traceback.format_exc(),但它是TracebackException实例的方法。它允许你以多种格式(如plain、context等)格式化堆栈跟踪。
  • format_tb(self, *args, **kwargs)类似于traceback.format_tb(),但它是TracebackException实例的方法。它返回堆栈跟踪的格式化列表。

相关文章

python极简教程:对象的方法_python对象的含义

这一场,主讲python的面向对象的第二部分—— 对象的方法 。目的:掌握Python对象的五个核心方法。init和new讲解之前,先上一段代码class Demo: def __init__...

Python类和对象详解_python中的类和对象,属性和方法

Python中的类(Class)和对象(Object)是面向对象编程的核心概念。通过类来定义对象的属性和行为,而对象则是类的实例。1. 类(Class)类是用来创建对象的模板,它定义了对象的属性(数据...

Python 对象有哪几种,我们可以从哪些角度进行分类呢?

楔子在程序开发中,我们每时每刻都在创建对象,那到底什么是对象呢?其实一个对象就是一片被分配的内存空间,空间可以是连续的,也可以是不连续的。然后空间里面存储了指定的数据,并提供了操作数据的一些功能方法。...

Python 如何创建一个 JSON 对象_python创建一个person类

我们可以使用下面的代码来在 Python 中创建一个 JSON 对象。import json data = {} data['key'] = 'value' json_data = json.dum...

详细介绍一下Python中的类与对象_python对象和类的关系

类和对象是面向对象编程的两个核心概念,而Python作为一门支持面向对象的编程语言,也是需要通过类和对象来实现代码的组织和封装的,下面我们就来详细介绍一下Python中的类与对象,来帮助大家一起了解它...

Python基础之对象、面向对象编程_python面向对象程序

本系列内容所用Python版本为anaconda,直接浏览器搜索下载安装即可!前面内容我有多次提到过对象这个概念,今天我想专门出一期内容,浅谈一下Python的对象这一基础概念,并谈谈我对面向对象编程...