是否可以使用exec()运行缩进块?

时间:2018-09-12 23:09:36

标签: python python-3.x exec

使用input---------------------------------------------- <aaa>001</aaa> <bbb>002</bbb> <ccc>003</ccc> operation------------------------------------------ Ctrl+Shift+F SEARCH ^(<aaa>)(.*)(</aaa>)(.*)$|^(<bbb>)(.*)(</bbb>)(.*)$ output--------------------------------------------- 1,1: <aaa>001</aaa> 2,1: <bbb>002</bbb> python命令,可以运行缩进的代码块(例如exec()语句或if/else)。例如:

try/except

此刻,我正在使用它来运行代码:

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

我也知道这不是让用户输入自己的代码的“ Python风格”或“良好实践”,但这对我代码的其他部分很有用。

3 个答案:

答案 0 :(得分:0)

这里的问题不是缩进。问题在于您要尝试exec一条复合语句的各行。没有完整的内容,Python无法理解复合语句。

exec整个输入作为一个单元:

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

答案 1 :(得分:0)

摘自exec()文档:

  

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

因此,您可以做类似的事情

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

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

答案 2 :(得分:0)

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

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

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