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.ps1
和sys.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
如果命令完成且包含语法错误,或引发OverflowError
或ValueError
如果命令包含无效的文本。
交互式解释程序对象¶
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')¶
在解释器中编译并运行一些源代码。参数与for相同
compile_command()
;的默认值 文件名 是'<input>'
为了 符号 是'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的解析器提供的默认文件名中,因为它总是使用
'<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()¶
从输入缓冲区中删除任何未处理的源文本。