您的位置:  首页 » Python » – 解释器基类 – 自定义Python解释器(Python教程)(参考资料)

code解释器基类

源代码: Lib / code.py


codemodule提供了在Python中实现read-eval-print循环的工具。包括两个类和便利功能,可用于构建提供交互式解释器提示的应用程序.

class code.InteractiveInterpreterlocals=None

这个类处理解析和解释器状态(用户的命名空间);它不处理输入缓冲或提示或输入文件命名(文件名始终显式传递)。可选localsarguments指定将在其中执行代码的字典;它默认为一个新创建的字典,键"__name__"设置为"__console__"并且键"__doc__"设置为None.

class code.InteractiveConsolelocals=None, filename=”<console>”

密切模拟交互式Python解释器的行为。这个类建在InteractiveInterpreter并使用熟悉的sys.ps1sys.ps2添加提示,并输入缓冲.

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

用于运行读取 – 评估 – 打印循环的便捷功能。这创建了一个InteractiveConsole的新实例,并设置readfunc用作InteractiveConsole.raw_input()方法,如果提供的话。如果提供local,则将其传递给InteractiveConsole构造函数用作解释器循环的默认命名空间。然后用interact()banner运行实例的exitmsg作为thebanner和退出消息传递使用,如果提供的话。控制台对象在使用后丢弃

版本3.6更改:添加 exitmsg参数。

code.compile_commandsource, filename=”<input>”, symbol=”single”

此函数对于想要模拟Python的interpretermain循环(a.k.a.read-eval-print循环)的程序非常有用。棘手的部分是确定当用户输入了一个不完整的命令,可以通过输入更多文本来完成(而不是完整的命令或语法错误)。这个功能almost总是做出与真正的解释器mainloop相同的决定.

source是源字符串;filename是从中读取源的可选文件名,默认为"<input>";和symbol是可选语法的起始符号,它应该是"single"(默认值)或"eval".

如果命令完整且有效,则返回一个代码对象(与compile(source, filename, symbol)相同);None如果命令不完整;提高SyntaxError如果命令完成且包含语法错误,请执行or//ises OverflowError要么 ValueError如果命令包含无效的文字.

交互式翻译对象

InteractiveInterpreter.runsourcesource, filename=”<input>”, symbol=”single”

在解释器中编译并运行一些源代码。参数与compile_command();filename"<input>",对于symbol"single"。可能会发生以下几件事:

  • 输入不正确;compile_command()提出异常(SyntaxErrorOverflowError)。通过调用showsyntaxerror()方法将打印语法回溯。runsource()返回False.
  • 输入不完整,需要更多输入;compile_command()返回None. runsource()返回True.
  • 输入完成;compile_command()返回了一个代码对象。通过调用runcode()(它还处理运行时间,除了SystemExit)。runsource()返回False.

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

InteractiveInterpreter.runcodecode

执行代码对象。发生异常时,showtraceback()被调用来显示回溯。除了SystemExit,允许传播.

关于的说明KeyboardInterrupt:此异常可能在此代码的其他位置发生,并且可能并不总是被捕获。打电话者应该准备好处理它

InteractiveInterpreter.showsyntaxerror (filename=None)

显示刚刚发生的语法错误。这不显示堆栈跟踪,因为没有一个语法错误。如果filename给出了它,它被填充到异常而不是Python’sparser提供的默认文件名中,因为它在从字符串读取时总是使用"<string>"。输出是由write()method

InteractiveInterpreter.showtraceback// ( )

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

在版本3.5中更改:显示完整的链式回溯,而不仅仅是主要的回溯.

InteractiveInterpreter.writedata

将字符串写入标准错误流(sys.stderr)。Derived classess应该覆盖它以根据需要提供适当的输出处理.

交互式控制台对象

InteractiveConsole类是InteractiveInterpreter,所以提供了解释器对象的所有方法以及以下添加内容.

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

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

可选的exitmsg参数指定退出时打印的退出消息。通过空字符串来禁止退出消息。如果没有给出exitmsgNone,则会打印出一条默认信息.

更改版本3.4:要禁止打印任何横幅,请传递空字符串.

更改版本3.6:退出时打印退出消息.

InteractiveConsole.pushline

将一行源文本推送到解释器。该行不应该有atrailing换行符;它可能有内部换行符。该行被附加到abuffer,并且使用缓冲区的内容作为源来调用解释器的runsource()方法。如果这表明命令已执行或无效,则重置缓冲区;否则,命令是不完整的,并且缓冲区保留在追加行之后的状态。如果需要更多输入,则输出值为True,如果该行以某种方式处理,则为False(这与runsource()相同).

InteractiveConsole.resetbuffer

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

InteractiveConsole.raw_input (prompt=””)

写一个提示并读一行。返回的行不包括trailingnewline。当用户输入EOF键序列时,EOFError提出。基本实现从sys.stdin读取;子类可以用不同的实现来代替它.

发表评论

电子邮件地址不会被公开。 必填项已用*标注