code ---解释器基类

源代码: Lib/code.py


这个 code 模块提供了在python中实现读取eval打印循环的工具。包括两个类和便利功能,可用于构建提供交互式解释程序提示的应用程序。

class code.InteractiveInterpreter(locals=None)

这个类处理解析和解释器状态(用户的命名空间);它不处理输入缓冲、提示或输入文件命名(文件名总是显式传入)。可选的 locals 参数指定将在其中执行代码的字典;它默认为使用键新建的字典。 '__name__' 设置为 '__console__' 关键 '__doc__' 设置为 None .

class code.InteractiveConsole(locals=None, filename='<console>')

密切模拟交互式Python解释器的行为。这门课是建立在 InteractiveInterpreter 并使用熟悉的 sys.ps1sys.ps2 和输入缓冲。

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)

运行读取评估打印循环的便利功能。这将创建的新实例 InteractiveConsole读写功能 用作 InteractiveConsole.raw_input() 方法(如果提供)。如果 地方的 提供,它传递给 InteractiveConsole 用作解释器循环的默认命名空间的构造函数。这个 interact() 然后使用运行实例的方法 横幅EXITMSG 作为横幅和退出消息传递以供使用(如果提供)。控制台对象在使用后被丢弃。

在 3.6 版更改: 补充 EXITMSG 参数。

code.compile_command(source, filename='<input>', symbol='single')

这个函数对于那些想要模拟python的解释器主循环(也就是read eval打印循环)的程序很有用。棘手的部分是确定用户何时输入了一个不完整的命令,该命令可以通过输入更多的文本(而不是完整的命令或语法错误)来完成。这个函数 几乎 总是做出与真正的解释器主循环相同的决定。

来源 是源字符串; 文件名 是从中读取源的可选文件名,默认为 '<input>' ;和 符号 是可选的语法开始符号,它应该是 'single' (违约), 'eval''exec' .

返回代码对象(与 compile(source, filename, symbol) )命令是否完整有效; None 如果命令不完整;引发 SyntaxError 如果命令完成且包含语法错误,或引发 OverflowErrorValueError 如果命令包含无效的文本。

交互式解释程序对象

InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')

在解释器中编译并运行一些源代码。参数与for相同 compile_command() ;的默认值 文件名'<input>' 为了 符号'single' . 可能会发生以下几种情况之一:

返回值可用于决定是否使用 sys.ps1sys.ps2 提示下一行。

InteractiveInterpreter.runcode(code)

执行代码对象。当发生异常时, showtraceback() 调用以显示回溯。捕获所有异常,除非 SystemExit ,允许传播。

关于…的笔记 KeyboardInterrupt :此异常可能在此代码的其他地方发生,并且可能不会总是被捕获。调用的人应该准备好处理这件事。

InteractiveInterpreter.showsyntaxerror(filename=None)

显示刚才发生的语法错误。这不会显示堆栈跟踪,因为没有用于语法错误的堆栈跟踪。如果 filename 如果给定,它将被填充到异常中,而不是由Python的解析器提供的默认文件名中,因为它总是使用 '<string>' 从字符串中读取时。输出由 write() 方法。

InteractiveInterpreter.showtraceback()

显示刚刚发生的异常。我们移除第一个堆栈项,因为它在解释器对象实现中。输出由 write() 方法。

在 3.5 版更改: 将显示完整链接的回溯,而不仅仅是主回溯。

InteractiveInterpreter.write(data)

将字符串写入标准错误流 (sys.stderr )派生类应重写此项,以便根据需要提供适当的输出处理。

交互式控制台对象

这个 InteractiveConsole 类是的子类 InteractiveInterpreter ,因此提供了解释器对象的所有方法以及以下附加内容。

InteractiveConsole.interact(banner=None, exitmsg=None)

密切模拟交互式Python控制台。可选的 横幅 参数指定在第一次交互之前要打印的横幅;默认情况下,它打印一个类似于标准python解释器打印的横幅,后面是圆括号中控制台对象的类名(以免与真正的解释器混淆,因为它非常接近!).

可选的 EXITMSG 参数指定退出时打印的退出消息。传递空字符串以取消退出消息。如果 EXITMSG 未给予或 None ,将打印默认消息。

在 3.4 版更改: 要禁止打印任何横幅,请传递一个空字符串。

在 3.6 版更改: 退出时打印退出消息。

InteractiveConsole.push(line)

将一行源文本推送到解释器。该行不应具有尾随换行符;它可能具有内部换行符。该行被附加到缓冲区和解释器的 runsource() 方法是以缓冲区的连接内容作为源调用的。如果这表示命令已执行或无效,则缓冲区将被重置;否则,命令将不完整,缓冲区将保留在追加行后的状态。返回值为 True 如果需要更多的输入, False 如果这条线是以某种方式处理的(这与 runsource()

InteractiveConsole.resetbuffer()

从输入缓冲区中删除任何未处理的源文本。

InteractiveConsole.raw_input(prompt='')

写一个提示,读一行。返回的行不包括尾随新行。当用户输入eof键序列时, EOFError 提高了。基本实现从 sys.stdin ;子类可以用不同的实现来替换它。