– 解释器基类 – 自定义Python解释器(Python教程)(参考资料)
code
– 解释器基类
源代码: Lib / code.py
code
module提供了在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
读取;子类可以用不同的实现来代替它.
评论被关闭。