高层层

本章中的函数将允许您执行文件或缓冲区中提供的 Python 源代码,但不允许您与解释器进行更详细的交互。

这些函数中的几个函数接受语法中的开始符号作为参数。可用的开始符号是Py_eval_inputPy_file_inputPy_single_input。这些在接受它们作为参数的函数之后进行描述。

还要注意,其中一些函数带有FILE*参数。需要谨慎处理的一个特殊问题是,不同 C 库的FILE结构可能不同且不兼容。在 Windows(至少)下,动态链接的扩展实际上可能使用不同的库,因此应注意,只有在确定FILE*参数是由与 Python 运行时相同的库创建的情况下,才将FILE*参数传递给这些函数。正在使用。

请注意,如果引发了其他未处理的SystemExit,则只要未设置Py_InspectFlag,该函数就不会返回1,而是退出该过程。

3.8 版的新Function。

请注意,如果引发了其他未处理的SystemExit,则只要未设置Py_InspectFlag,该函数就不会返回-1,而是退出该过程。

Note

在 Windows 上,* fp *应该以二进制模式打开(例如fopen(filename, "rb")。否则,Python 可能无法处理 LF 行正确结束的脚本文件。

成功执行 Importing 后,返回0;如果发生异常,则返回-1;如果存在解析错误,则返回errcode.h include 文件中作为 Python 一部分分发的错误代码。 (请注意,Python.h不包含errcode.h,因此,如果需要,则必须特别包含.)

结果必须是由PyMem_RawMalloc()PyMem_RawRealloc()NULL分配的字符串(如果发生错误)。

在版本 3.4 中更改:结果必须由PyMem_RawMalloc()PyMem_RawRealloc()分配,而不是由PyMem_Malloc()PyMem_Realloc()分配。

这是下面PyRun_StringFlags()的简化界面,将* flags *设置为NULL

在对象* globals locals 指定的上下文中,pass str 指定的编译器标志从 str *执行 Python 源代码。 * globals *必须是字典; * locals 可以是实现 Map 协议的任何对象。参数 start *指定用于解析源代码的启动令牌。

返回将代码作为 Python 对象执行的结果;如果引发异常,则返回NULL

这是下面PyRun_FileExFlags()的简化界面,* closeit 设置为0 flags *设置为NULL

这是下面PyRun_FileExFlags()的简化界面,将* flags *设置为NULL

这是下面PyRun_FileExFlags()的简化界面,将* closeit *设置为0

PyRun_StringFlags()相似,但是 Python 源代码是从* fp *读取的,而不是从内存中的字符串读取的。 * filename 应该是文件的名称,它是pass文件系统编码(sys.getfilesystemencoding())解码的。如果 closeit *为 true,则在PyRun_FileExFlags()返回之前关闭文件。

这是下面Py_CompileStringFlags()的简化界面,将* flags *设置为NULL

这是下面Py_CompileStringExFlags()的简化界面,* optimize *设置为-1

解析并编译* str 中的 Python 源代码,返回生成的代码对象。起始令牌由 start *给出;这可以用来约束可以编译的代码,它们应该是Py_eval_inputPy_file_inputPy_single_input。 * filename *指定的文件名用于构造代码对象,并可能出现在回溯或SyntaxError异常消息中。如果无法解析或编译代码,则返回NULL

整数* optimize *指定编译器的优化级别;值-1选择-O选项给出的解释器的优化级别。显式级别为0(无优化; __debug__为 true),1(语句已删除,__debug__为 false)或2(也删除了文档字符串)。

3.4 版的新Function。

类似于Py_CompileStringObject(),但是* filename *是从文件系统编码(os.fsdecode())解码的字节字符串。

3.2 版中的新Function。

这是PyEval_EvalCodeEx()的简化接口,仅包含代码对象以及全局和局部变量。其他参数设置为NULL

给定一个特定的评估环境,评估预编译的代码对象。该环境由全局变量字典,局部变量 Map 对象,参数数组,关键字和默认值,keyword-only参数默认值字典以及单元格的闭合 Tuples 组成。

评估执行框架。这是PyEval_EvalFrameEx()的简化接口,用于向后兼容。

这是 Python 解释的主要Function。与执行帧* f 相关联的代码对象被执行,解释字节码并根据需要执行调用。额外的 throwflag *参数通常可以忽略-如果为 true,则它会立即引发异常;用于生成器对象的throw()方法。

在版本 3.4 中进行了更改:此函数现在包括调试 assert,以帮助确保它不会静默丢弃活动异常。

每当PyCompilerFlags *flagsNULL时,cf_flags被视为等于0,并且由于from __future__ import引起的任何修改都将被丢弃。

默认情况下,该字段将被忽略,并且仅当在* cf_flags *中设置PyCF_ONLY_AST标志时才使用该字段。

在 3.8 版中进行了更改:添加了* cf_feature_version *字段。

首页