27.11.检查-检查带电物体

这个检查模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块、类、方法、函数、,回溯、框架对象和代码对象。例如,它可以帮助您检查类的内容,检索方法的源代码,提取并格式化函数的参数列表,或获取所需的所有信息以显示详细的回溯。

该模块提供的服务主要有四种:类型检查,获取源代码,检查类和函数,并检查解释器堆栈。

27.11.1. 类型和成员

这个获取成员()函数检索对象的成员,例如类或模块。名称以“is”开头的16个函数主要是为第二个参数提供了方便的选择获取成员().它们还可以帮助您确定何时可以找到以下特别的属性:

类型 属性 描述
模块 __文件__ 文档字符串
  __文件__ 文件名(缺少内置模块)
__文件__ 文档字符串
  __模块__ 其中的模块名称该类已定义
方法 __文件__ 文档字符串
  __姓名__ 与此相关的名称方法已定义
  __函数__ 函数对象包含实现方法的
  __自我__ 方法已绑定,或
功能 __文件__ 文档字符串
  __姓名__ 与此相关的名称函数已定义
  __代码__ 代码对象包含已编译函数字节码
  __默认值__ 任何默认元组参数的值
  __全球__ 全局命名空间,其中此函数已定义
追溯 tb_帧 在此框显对象水平
  tb_拉丁语 上次尝试的索引字节码中的指令
  tb_线路号 当前行号Python源代码
  tb_next(下一步) 下一个内部回溯对象(由此调用水平)
框架 返回(_B) 下一个外部帧对象(此帧的调用者)
  内置(_B) 已看到内置命名空间通过这个框架
  f代码 代码对象正在在此帧中执行
  全局(_G) 全局命名空间由查看这个框架
  f _拉斯蒂 上次尝试的索引字节码中的指令
  f行号 当前行号Python源代码
  _本地人 看到的本地命名空间这个框架
  限制(_f) 0或1(如果帧位于)受限执行模式
  跟踪(_trace) 此的跟踪函数框架,或
代码 协同变量计数(_A) 参数数量(不是包括*或**参数)
  co代码 原始编译字符串字节码
  共同成本 使用的常量元组在字节码中
  文件名(_F) 其中的文件名此代码对象是创建
  第一行编号(_F) 中的第一行数Python源代码
  标志(_F) 位图:1=优化|2=新本地人|4=*参数|8=**参数
  co_注释 线的编码映射数字到字节码指数
  公司名称 此代码使用的名称对象已定义
  名称(_N) 本地名称元组变量
  非线性 局部变量数
  共同堆叠大小 虚拟机堆栈所需空间
  协同变量名(_V) 名称元组参数和局部变量
内置 __文件__ 文档字符串
  __姓名__ 此的原始名称函数或方法
  __自我__ 实例,其中方法已绑定,或
检查。获取成员(对象[,谓语])

返回按排序的(名称、值)对列表中对象的所有成员名称。如果可选谓语提供了参数,只有成员谓词返回包含真值。

注释

获取成员()当参数为是一个类(此行为从目录()功能)。

检查。获取模块信息(路径)
返回一个名元组 ModuleInfo(名称, 后缀, 模式, 模块_类型)描述Python如何解释由路径如果是模块,或者如果它不会被识别为模块。在那个元组中,名称是模块的名称,但没有名称任何随附包装,后缀是文件名的尾随部分(可能不是以点分隔的扩展名),模式打开()模式,即将被使用(“r”“rb”)、和模块_类型是整数给定模块的类型。模块_类型将具有以下值进口模块;请参阅有关模块类型的更多信息,请参阅该模块的文档。
检查。获取模块名称(路径)
返回由文件命名的模块的名称路径,不包括封装包的名称。这使用与解释器相同的算法搜索模块时使用。如果根据口译员规则,返回。
检查。异模(对象)
如果对象是模块,则返回true。
检查。isclass类(对象)
如果对象是类(无论是内置的还是在Python中创建的),则返回true代码。
检查。ismethod公司(对象)
如果对象是用Python编写的绑定方法,则返回true。
检查。is函数(对象)
如果对象是包含函数的Python函数,则返回true由创建λ表达式。
检查。isgenerator函数(对象)
如果对象是Python生成器函数,则返回true。
检查。离子发生器(对象)
如果对象是生成器,则返回true。
检查。逆时针旋转(对象)
如果对象是回溯,则返回true。
检查。isframe(isframe)(对象)
如果对象是帧,则返回true。
检查。iscode码(对象)
如果对象是代码,则返回true。
检查。内置(对象)
如果对象是内置函数或绑定的内置方法,则返回true。
检查。以色列路线(对象)
如果对象是用户定义的或内置的函数或方法,则返回true。
检查。抽象(对象)
如果对象是抽象基类,则返回true。
检查。ismethoddescriptor方法描述符(对象)

如果对象是方法描述符,则返回true,但如果ismethod(),isclass(),isfunction()内置()都是真的。

例如,对于整数____加__.通过此测试的对象有一个__得到__属性,但不是__套__属性,但是除此之外,属性集有所不同。__姓名__通常是明智的,以及__文件__通常是。

通过同时通过其他测试之一的描述符实现的方法从返回falseismethoddescriptor()测试,只是因为其他测试承诺更多–例如,您可以指望__函数__对象经过时的属性(等)ism方法().

检查。is数据描述符(对象)

如果对象是数据描述符,则返回true。

数据描述符同时具有__得到__和a__套__属性。例如属性(在Python中定义)、getset和成员。这个后两种是在C中定义的,对于这些类型在Python实现中是健壮的。通常,数据描述符也将具有__姓名____文件__属性(属性、getset和成员都具有这两个属性),但这是不保证。

检查。isgetset描述符(对象)

如果对象是getset描述符,则返回true。

CPython实施细节:getset是在扩展模块中通过PyGetSetDef(虚拟获取设置定义)结构。对于没有这样的Python实现类型,此方法将始终返回False(错误).

检查。ismember描述符(对象)

如果对象是成员描述符,则返回true。

CPython实施细节:成员描述符是在扩展模块中通过虚拟成员定义结构。对于没有这样的Python实现类型,此方法将始终返回False(错误).

27.11.2条。检索源代码

检查。获取文档(对象)
获取对象的文档字符串,使用清除清洁文档().
检查。获取评论(对象)
在单个字符串中返回紧邻对象的源代码(对于类、函数或方法),或位于Python源文件(如果对象是模块)。
检查。获取文件(对象)
返回定义对象的(文本或二进制)文件的名称。如果出现以下情况,则此操作将失败类型错误如果对象是内置模块,类或函数。
检查。获取模块(对象)
尝试猜测对象是在哪个模块中定义的。
检查。获取源文件(对象)
返回定义了对象的Python源文件的名称。这个将失败,并返回类型错误如果对象是内置模块、类或功能。
检查。获取源代码行(对象)
返回对象的源行和起始行号列表。这个参数可以是模块、类、方法、函数、回溯、框架或代码对象。源代码作为对应于对象,行号指示原始源文件中第一个找到代码行。IO错误如果源代码不能被检索。
检查。获取源代码(对象)
返回对象的源代码文本。参数可以是模块,类、方法、函数、回溯、框架或代码对象。源代码是作为单个字符串返回IO错误如果源代码无法检索。
检查。清洁医生(文件)
从缩进以与块对齐的文档字符串中清除缩进代码的。可以从第二行均匀删除的任何空白已删除。此外,所有选项卡都将展开为空格。

27.11.3. 类和函数

检查。获取类树(,unique=假)
将给定的类列表排列成嵌套列表的层次结构。其中a出现嵌套列表,它包含从其条目的类派生的类紧跟在列表前面。每个条目都是包含类和其基类的元组。如果独特的参数为true,正好一个条目出现在给定列表中每个类的返回结构中。否则,使用多重继承的类及其后代将出现多重继承次。
检查。获取参数规范(函数)

获取Python函数参数的名称和默认值。A类名元组 ArgSpec(参数, 变量, 关键字, 默认值)返回。参数是参数名称的列表。可变参数关键字是的名字***参数或.默认值是一个默认参数值的元组或无(如果没有默认参数);如果这个元组有n个元素,它们对应于最后一个n个元素在中列出参数.

自3.0版以来已弃用:使用获取完整的argspec()相反,它提供了有关仅使用关键字的参数和注释。

检查。获取完整的参数规范(函数)

获取Python函数参数的名称和默认值。A类名元组返回:

FullArgSpec(参数, 变量, 瓦克, 默认值, kwonlyargs, kwonlydefaults, 注释)

参数是参数名称的列表。可变参数瓦克是名字吗***参数或.默认值是的n元组最后n个参数的默认值。kwonlyargs公司是的列表仅使用关键字的参数名称。kwonlydefaults公司是字典映射名称从kwonlyargs到默认值。注释是字典映射参数注释的名称。

元组中的前四项对应于获取argspec().

检查。获取参数值(框架)
获取有关传递到特定框架中的参数的信息。A类名元组 ArgInfo(参数, 变量, 关键字, 当地人)返回。参数是参数名称的列表。可变参数关键字是的名字***参数或.当地人给定框架的局部字典。
检查。formatargspec格式(参数[,可变参数,瓦克,默认值,格式目标,formatvarags格式,格式varkw,形式值])
根据返回的四个值格式化一个漂亮的参数规范获取argspec()。format*参数是相应的可选参数为将名称和值转换为字符串而调用的格式化函数。
检查。格式化目标值(参数[,可变参数,瓦克,当地人,格式目标,formatvarags格式,形式标记,形式值])
根据返回的四个值格式化一个漂亮的参数规范获取参数值()。format*参数是相应的可选参数为将名称和值转换为字符串而调用的格式化函数。
检查。获取mro(cls公司)
在方法解析中返回类cls的基类(包括cls)的元组订单。没有类在此元组中出现多次。请注意,该方法解析顺序取决于cls的类型。除非是一个非常特殊的用户定义元类型正在使用中,cls将是元组的第一个元素。

27.11.4. 解释器堆栈

当以下函数返回“帧记录”时,每条记录都是六项:帧对象、文件名、当前行的行号、,函数名、源代码中的上下文行列表以及该列表中当前行的索引。

注释

保留对框架对象的引用,如框架的第一个元素中所示记录这些函数返回,可以使程序创建引用循环。创建参考循环后,所有对象的寿命可以从形成循环的对象中访问到即使启用了Python的可选循环检测器,时间也会更长。如果此类循环必须创建时,重要的是要确保它们被显式破坏,以避免延迟销毁对象和增加内存消耗。

虽然循环检测器会捕捉到这些,但帧的破坏(和局部变量)可以通过删除最后条款。如果循环检测器编译Python或使用gc.disable()例如:

定义 把手堆叠框架无泄漏():
    框架 = 检查.当前帧()
    尝试:
        #对框架做点什么
    最后:
        德尔 框架

可选的上下文大多数函数支持的参数指定要返回的上下文行数,以当前行为中心行。

检查。获取框架信息(框架,上下文=1)
获取有关帧或回溯对象的信息。A类名元组 回溯(文件名, 行号, 功能, 代码上下文, 索引)返回。
检查。获取外部帧(框架,上下文=1)
获取一个帧和所有外部帧的帧记录列表。这些框架表示导致创建的调用框架。中的第一个条目返回的列表表示框架; 最后一项表示最外面的调用框架的堆栈。
检查。获取内帧(追溯,上下文=1)
获取回溯帧和所有内部帧的帧记录列表。这些帧表示由于框架。中的第一个条目列表表示追溯; 最后一项表示异常所在的位置提高。
检查。当前帧()

返回调用方堆栈帧的帧对象。

CPython实施细节:此函数依赖于解释器中的Python堆栈帧支持,这并不能保证在所有Python实现中都存在。如果在没有Python堆栈框架的实现中运行支持这一点函数返回.

检查。堆栈(上下文=1)
返回调用方堆栈的帧记录列表。中的第一个条目返回列表表示调用者;最后一项表示最外层调用堆栈。
检查。追踪(上下文=1)
返回当前帧和在其中引发当前正在处理的异常的帧。第一个列表中的条目代表调用者;最后一个条目表示引发了异常。