首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

code

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

class code.InteractiveInterpreter([locals])

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

class code.InteractiveConsole([locals[, filename]])

密切模拟交互式Python解释器的行为。该类基础上InteractiveInterpreter,并使用熟悉的提示增加了sys.ps1sys.ps2和输入缓冲。

code.interact([banner[, readfunc[, local]]])

便捷功能运行读取评估打印循环。 这将创建一个InteractiveConsole的新实例,并将readfunc设置为InteractiveConsole.raw_input()方法(如果提供)。 如果提供了本地,则将其传递给InteractiveConsole构造函数,以用作解释器循环的默认名称空间。 如果提供,则实例的interact()方法随横幅传递,作为要使用的横幅运行。 控制台对象在使用后被丢弃。

code.compile_command(source[, filename[, symbol]])

这个函数对于想要模拟Python的解释器主循环(又名读 - 评估 - 打印循环)的程序很有用。棘手的部分是确定用户何时输入了可以通过输入更多文本(而不是完整命令或语法错误)完成的不完整命令。这个功能几乎总是与真正的解释器主循环做出相同的决定。

是源字符串; filename 是从中读取源的可选文件名,默认为'<input>'; symbol 是可选的语法开始符号,这应该是'single'(缺省值)或'eval'

如果命令是完整且有效的,则返回代码对象(与compile(源文件名,文件名,符号)相同); 如果命令不完整则无; 如果命令完成且包含语法错误,则引发SyntaxError;如果命令包含无效文字,则引发OverflowError或ValueError。

1.交互式解释器对象

InteractiveInterpreter.runsource(source[, filename[, symbol]])

在解释器中编译并运行一些源代码。 参数与compile_command()相同。 文件名的默认值是'<input>',符号的默认值是'single'。 有几件事会发生:

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

返回值可用于决定是使用sys.ps1还是sys.ps2提示下一行。

InteractiveInterpreter.runcode(code)

执行一个代码对象。当发生异常时,showtraceback()被调用来显示回溯。除了SystemExit允许传播的所有异常都被捕获。

关于KeyboardInterrupt的一个注意事项:此例外情况可能发生在此代码的其他地方,并且可能无法始终捕获。调用者应该准备好处理它。

InteractiveInterpreter.showsyntaxerror([filename])

显示刚发生的语法错误。这不会显示堆栈跟踪,因为没有语法错误。如果给出了文件名,它会填充到异常中,而不是Python解析器提供的默认文件名,因为'<string>'从字符串读取时它总是使用。输出由该write()方法编写。

InteractiveInterpreter.showtraceback()

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

InteractiveInterpreter.write(data)

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

2.交互式控制台对象

InteractiveConsole类是的一个InteractiveInterpreter子类,因此提供了解释对象以及以下附加的所有方法。

InteractiveConsole.interact([banner])

密切模拟交互式Python控制台。可选的横幅参数指定在首次交互之前要打印的横幅; 默认情况下,它会打印一个与标准Python解释器打印的横幅相似的横幅,然后是括号内的控制台对象的类名称(以免将其与真正的解释器混淆 - 因为它太接近了!)。

InteractiveConsole.push(line)

将一行源文本推送给解释器。该行不应该有换行符; 它可能有内部换行符。该行被附加到一个缓冲区,并且解释器的runsource()方法被调用,并将缓冲区的连接内容作为源进行调用。如果这表示该命令已执行或无效,则重置缓冲区; 否则,该命令是不完整的,并且缓冲区保持原样,因为它是在追加行后。如果需要更多输入,返回值是True如果以某种方式处理该行(这与之相同runsource())则为False

InteractiveConsole.resetbuffer()

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

InteractiveConsole.raw_input([prompt])

编写提示并阅读一行。返回的行不包括尾随换行符。当用户输入EOF按键序列时,EOFError会产生。基础实现使用内置函数raw_input(); 一个子类可以用不同的实现来替换它。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com