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

liftword3个月前 (02-17)技术文章25

帧对象

帧对象:栈帧(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中的类(Class)和对象(Object)是面向对象编程的核心概念。通过类来定义对象的属性和行为,而对象则是类的实例。1. 类(Class)类是用来创建对象的模板,它定义了对象的属性(数据...

python初识对象_python对象编程

使用对象组织数据1.在程序中设计表格,我们称之为:设计类(class)class Student: name = None # 记录学生姓名2.在程序中打印表格,我们称之为:创建对...

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

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

一文了解 Python 中的面向对象编程

Python 是一种多功能编程语言,支持多种编程范例,包括面向对象编程 (OOP) 和过程编程。这种灵活性使开发人员可以根据项目的具体需求选择最合适的范例,结合每种方法的优势来实现最佳结果。Pytho...

python类与对象_python类和对象的区别

在介绍python类与对象之前,首先需要了解面向过程编程和面向对象编程两种程序设计方法。面向过程编程OPP(Procedure Oriented Programming),是一种以事物为中心的编程思想...

Python 基础:在 Python 中,一切都是对象

如果您使用 Python 的时间很短,您可能听说过这样的说法:“Python 中的一切都是一个对象。这不仅仅是一句口号——它是这门语言的一个基本特征。从简单的整数和字符串到函数、类,甚至运算符,Pyt...