【问题标题】:Is it possible to run indented blocks using exec()?是否可以使用 exec() 运行缩进块?
【发布时间】:2018-09-12 23:09:36
【问题描述】:

使用exec() python 命令,是否可以运行缩进的代码块(如if/else 语句或try/except)。例如:

name = input("Enter name: ")
if name == "Bob":
     print("Hi bob")
else:
     print("Hi user")

目前我正在使用它来运行代码:

code_list = []
while True:
     code = input("Enter code or type end: ")
     if code == "end":
          break
     else:
          code_list.append(code)
for code_piece in code_list:
     exec(code_piece)

我也知道让用户输入他们自己的代码不是很“Pythonic”或“好的做法”,但它在我的代码的其他部分很有用。

【问题讨论】:

  • 您是否尝试过使用exec 运行缩进代码?出了什么问题?

标签: python python-3.x exec


【解决方案1】:

这里的问题不在于缩进。问题是你试图exec 复合语句的行一一对应。没有完整的东西,Python 无法理解复合语句。

exec整个输入为一个单元:

exec('\n'.join(code_list))

【讨论】:

  • 太好了,解决了。
  • 很好,解决了! @cattythegamer
【解决方案2】:

来自exec() 文档:

此函数支持 Python 代码的动态执行。 object 必须是字符串或代码对象。如果是字符串,则将字符串解析为一组 Python 语句,然后执行 ...

因此,您可以执行以下操作

exec("a=2\nb=3")
exec("if a==2:\n\tprint(a)\nelse:\tprint(b)")

您只需要遵循正确的语法和缩进即可。

【讨论】:

    【解决方案3】:

    在 exec() 函数中格式化代码的另一种方法是使用三引号,这样可以很容易地看到代码的样子。

    code = """                     # Opening quotes
    for i in range(0, 10):         # Code line 1         
        print(i)                   # Code line 2
    """                            # Closing quotes
    exec(code)
    

    如果您要求用户输入代码,这可能不起作用,但它可能会派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2015-03-04
      • 2011-04-16
      • 2013-07-13
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多