On this page
代码—解释器 Base Class
源代码: Lib/code.py
code
模块提供了在 Python 中实现 read-eval-print 循环的Function。包括两个类和便利Function,可用于构建提供交互式解释器提示的应用程序。
-
- class *
code.
InteractiveInterpreter
(* locals = None *)
- 此类处理解析和解释器状态(用户的名称空间);它不处理 Importing 缓冲或提示或 Importing 文件命名(文件名始终显式传递)。可选的* locals *参数指定将在其中执行代码的字典;它默认为键
'__name__'
设置为'__console__'
且键'__doc__'
设置为None
的新创建的字典。
- class *
-
- class *
code.
InteractiveConsole
(* locals = None , filename =“ ” *)
- 紧密模拟交互式 Python 解释器的行为。此类基于InteractiveInterpreter构建,并使用熟悉的
sys.ps1
和sys.ps2
以及 Importing 缓冲添加提示。
- class *
code.
interact
(* banner = None , readfunc = None , local = None , exitmsg = None *)- 便利Function,可运行“读取评估打印”循环。这将创建一个新的InteractiveConsole实例,并将* readfunc 设置为InteractiveConsole.raw_input()方法(如果提供)。如果提供了 local ,则将其传递到InteractiveConsole构造函数以用作解释器循环的默认名称空间。然后,实例的interact()方法以 banner 和 exitmsg *作为标题和退出消息传递(如果提供)来运行。控制台对象在使用后将被丢弃。
在 3.6 版中进行了更改:添加了* exitmsg *参数。
code.
compile_command
(* source , filename =“ ” , symbol =“ single” *)- 对于想要模拟 Python 解释器主循环(也称为 read-eval-print 循环)的程序,此函数很有用。棘手的部分是确定用户何时 Importing 了不完整的命令,可以pass Importing 更多文本来完成该命令(而不是完整的命令或语法错误)。这个Function几乎(几乎)总是做出与真实解释器主循环相同的决定。
- source *是源字符串; * filename 是从中读取源的可选文件名,默认为
'<input>'
;和 symbol *是可选的语法开始符号,应为'single'
(默认值),'eval'
或'exec'
。
如果命令完整且有效,则返回一个代码对象(与compile(source, filename, symbol)
相同);否则,返回 0. None
如果命令不完整;如果命令完成并且包含语法错误,则引发SyntaxError;如果命令包含无效的 Literals,则引发OverflowError或ValueError。
交互式口译对象
InteractiveInterpreter.
runsource
(* source , filename =“ ” , symbol =“ single” *)- 在解释器中编译并运行某些源代码。参数与compile_command()相同; * filename 的默认值为
'<input>'
, symbol *的默认值为'single'
。可能发生的事情之一:
- 在解释器中编译并运行某些源代码。参数与compile_command()相同; * filename 的默认值为
Importing 错误; compile_command()引发了一个异常(SyntaxError或OverflowError)。pass调用showsyntaxerror()方法将打印语法回溯。 runsource()返回
False
。Importing 不完整,需要更多 Importing; compile_command()返回了
None
。 runsource()返回True
。Importing 完成; compile_command()返回了代码对象。pass调用runcode()(也可以处理运行时异常,但SystemExit除外)来执行代码。 runsource()返回
False
。
该返回值可用于决定使用sys.ps1
还是sys.ps2
来提示下一行。
InteractiveInterpreter.
runcode
(* code *)- 执行一个代码对象。发生异常时,将调用showtraceback()来显示回溯。捕获所有 exception,但SystemExit除外,该 exception 可以传播。
关于KeyboardInterrupt的 Comments:此异常可能在此代码的其他地方发生,并不一定总是被捕获。呼叫者应准备好处理它。
InteractiveInterpreter.
showsyntaxerror
(* filename = None *)- 显示刚发生的语法错误。这不会显示堆栈跟踪,因为语法错误没有一个。如果给定了* filename *,它将填充到异常中,而不是 Python 解析器提供的默认文件名,因为从字符串读取时,它始终使用
'<string>'
。输出passwrite()方法写入。
- 显示刚发生的语法错误。这不会显示堆栈跟踪,因为语法错误没有一个。如果给定了* filename *,它将填充到异常中,而不是 Python 解析器提供的默认文件名,因为从字符串读取时,它始终使用
InteractiveInterpreter.
showtraceback
( )- 显示刚刚发生的异常。我们删除第一个堆栈项,因为它在解释器对象实现中。输出passwrite()方法写入。
在版本 3.5 中进行了更改:显示完整的链回,而不只是主回溯。
InteractiveInterpreter.
write
(* data *)- 将字符串写入标准错误流(
sys.stderr
)。派生类应重写此方法,以根据需要提供适当的输出处理。
- 将字符串写入标准错误流(
交互式控制台对象
InteractiveConsole类是InteractiveInterpreter的子类,因此提供了解释器对象的所有方法以及以下附加内容。
InteractiveConsole.
interact
(* banner = None , exitmsg = None *)- 紧密模拟交互式 Python 控制台。可选的* banner *参数指定在第一次互动之前要打印的横幅;默认情况下,它会打印出类似于标准 Python 解释器打印的横幅,并在括号后加上控制台对象的类名(以免将其与真实的解释器混淆,因为它是如此接近!)。
可选的* exitmsg 参数指定退出时打印的退出消息。传递空字符串以禁止退出消息。如果未提供 exitmsg *或None
,则显示默认消息。
在版本 3.4 中进行了更改:要禁止打印任何横幅,请传递一个空字符串。
在版本 3.6 中更改:退出时打印退出消息。
InteractiveConsole.
push
(* line *)- 将一行源文本推到解释器。该行不应包含尾随换行符;它可能有内部换行符。该行将附加到缓冲区,并使用缓冲区的串联内容作为源来调用解释器的
runsource()
方法。如果这表明命令已执行或无效,则将缓冲区复位;否则,缓冲区将被清除。否则,该命令将不完整,并且在追加行之后将缓冲区保留为原来的状态。如果需要更多 Importing,则返回值为True
,如果以某种方式处理了该行,则返回值为False
(这与runsource()
相同)。
- 将一行源文本推到解释器。该行不应包含尾随换行符;它可能有内部换行符。该行将附加到缓冲区,并使用缓冲区的串联内容作为源来调用解释器的
InteractiveConsole.
resetbuffer
( )- 从 Importing 缓冲区中删除所有未处理的源文本。
InteractiveConsole.
raw_input
(* prompt =“” *)- 编写提示并阅读一行。返回的行不包含尾随换行符。当用户 ImportingEOF 键序列时,将引发EOFError。基本实现从
sys.stdin
读取;子类可以用其他实现代替它。
- 编写提示并阅读一行。返回的行不包含尾随换行符。当用户 ImportingEOF 键序列时,将引发EOFError。基本实现从