– 解释器基类 – 自定义Python解释器(Python教程)(参考资料)
code– 解释器基类
源代码: Lib / code.py
codemodule提供了在Python中实现read-eval-print循环的工具。包括两个类和便利功能,可用于构建提供交互式解释器提示的应用程序.
- class
code.InteractiveInterpreter(locals=None) -
这个类处理解析和解释器状态(用户的命名空间);它不处理输入缓冲或提示或输入文件命名(文件名始终显式传递)。可选localsarguments指定将在其中执行代码的字典;它默认为一个新创建的字典,键
"__name__"设置为"__console__"并且键"__doc__"设置为None.
- class
code.InteractiveConsole(locals=None, filename=”<console>”) -
密切模拟交互式Python解释器的行为。这个类建在
InteractiveInterpreter并使用熟悉的sys.ps1和sys.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_command(source, 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//isesOverflowError要么ValueError如果命令包含无效的文字.
交互式翻译对象
InteractiveInterpreter.runsource(source, filename=”<input>”, symbol=”single”)-
在解释器中编译并运行一些源代码。参数与
compile_command();filename是"<input>",对于symbol是"single"。可能会发生以下几件事:- 输入不正确;
compile_command()提出异常(SyntaxError或OverflowError)。通过调用showsyntaxerror()方法将打印语法回溯。runsource()返回False. - 输入不完整,需要更多输入;
compile_command()返回None.runsource()返回True. - 输入完成;
compile_command()返回了一个代码对象。通过调用runcode()(它还处理运行时间,除了SystemExit)。runsource()返回False.
返回值可用于决定是否使用
sys.ps1或sys.ps2来提示下一行. - 输入不正确;
InteractiveInterpreter.runcode(code)-
执行代码对象。发生异常时,
showtraceback()被调用来显示回溯。除了SystemExit,允许传播.关于的说明
KeyboardInterrupt:此异常可能在此代码的其他位置发生,并且可能并不总是被捕获。打电话者应该准备好处理它
InteractiveInterpreter.showsyntaxerror(filename=None)-
显示刚刚发生的语法错误。这不显示堆栈跟踪,因为没有一个语法错误。如果filename给出了它,它被填充到异常而不是Python’sparser提供的默认文件名中,因为它在从字符串读取时总是使用
"<string>"。输出是由write()method
InteractiveInterpreter.showtraceback// ( )-
显示刚刚发生的异常。我们删除第一个堆栈迭代,因为它在解释器对象实现中。输出由
write()方法。在版本3.5中更改:显示完整的链式回溯,而不仅仅是主要的回溯.
InteractiveInterpreter.write(data)-
将字符串写入标准错误流(
sys.stderr)。Derived classess应该覆盖它以根据需要提供适当的输出处理.
交互式控制台对象
InteractiveConsole类是InteractiveInterpreter,所以提供了解释器对象的所有方法以及以下添加内容.
InteractiveConsole.interact(banner=None, exitmsg=None)-
关闭模拟交互式Python控制台。可选bannerarguments指定在第一次交互之前打印的横幅;默认情况下,它打印类似于标准Python解释器打印的abanner,后跟括号中控制台对象的类名(以免与真正的解释器混淆 – 因为它非常接近!).
可选的exitmsg参数指定退出时打印的退出消息。通过空字符串来禁止退出消息。如果没有给出exitmsg或
None,则会打印出一条默认信息.更改版本3.4:要禁止打印任何横幅,请传递空字符串.
更改版本3.6:退出时打印退出消息.
InteractiveConsole.push(line)-
将一行源文本推送到解释器。该行不应该有atrailing换行符;它可能有内部换行符。该行被附加到abuffer,并且使用缓冲区的内容作为源来调用解释器的
runsource()方法。如果这表明命令已执行或无效,则重置缓冲区;否则,命令是不完整的,并且缓冲区保留在追加行之后的状态。如果需要更多输入,则输出值为True,如果该行以某种方式处理,则为False(这与runsource()相同).
InteractiveConsole.resetbuffer()-
从输入缓冲区中删除任何未处理的源文本.
InteractiveConsole.raw_input(prompt=””)-
写一个提示并读一行。返回的行不包括trailingnewline。当用户输入EOF键序列时,
EOFError提出。基本实现从sys.stdin读取;子类可以用不同的实现来代替它.
评论被关闭。