【问题标题】:Print result if statement to exec is an expression [duplicate]如果要执行的语句是表达式,则打印结果[重复]
【发布时间】:2017-03-09 09:14:33
【问题描述】:

在 python 中,如果我 exec 打印一个值的语句,我将看到输出,例如,exec("print 10") 给我输出 10。但是,如果我这样做 exec("10") 我什么也没有输出,其中如果我在交互式 shell 中输入 10,我会得到 10 作为输出。使用exec 时如何获得此输出?也就是说,如果要执行的语句是一个表达式,我打印它的结果。

我的问题是如何确定要执行的语句是否是表达式。我是否应该执行以下操作:

def my_exec(script):
  try:
    print eval(compile(script, '<string>', 'eval'))
  except SyntaxError:
    exec(script)

# Prints 10.
my_exec("print(10)")

# Prints 10 as well.
my_exec("10")

更新:

基本上我想要在 jupyter notebook 中执行单元格的行为。

【问题讨论】:

  • 请不要问,立即删除,转发question
  • 谢谢@TigerhawkT3!但是,这不是重复的。您提到的帖子中没有答案。
  • @TigerhawkT3 你会删除重复标记吗?

标签: python exec


【解决方案1】:

首先,执行 10 在现实生活中没有意义。你怎么能执行一个数字?但是,您可以执行类似exec("print(10)") 的命令。我认为不需要创建 my_exec 函数。它的行为与普通的exec 相同。在交互式 shell 中,一切都不同,所以不要试图比较。基本上,exec("print(10)") 是您要查找的命令。不使用 exec 的另一种方法是print(10)

【讨论】:

  • 谢谢!我完全理解。
  • 例如compile(..., "&lt;string&gt;", "single")有我的my_exec的行为,但它不支持具有多个代码块的语句都是可执行的。
  • 那么,可以使用compile代替my_exec。那是我的观点。既然可以使用内置函数,为什么还要麻烦?
  • 它执行到第一个可执行块的末尾。例如,exec(compile("print 42\n print 10", "", "single")) 仅打印 42。我的my_exec 有效,但它涉及两个编译。我在这里问的确实是像你提到的那样更有原则的方式。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 2016-11-11
  • 2011-07-22
  • 1970-01-01
  • 2015-08-01
  • 2013-07-13
  • 1970-01-01
  • 2016-07-22
相关资源
最近更新 更多