[英]Is it possible to run indented blocks using exec()?
使用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)
我也知道这不是让用户输入自己的代码的“ Python风格”或“良好实践”,但这对我代码的其他部分很有用。
这里的问题不是缩进。 问题是您要一一exec
复合语句的各行。 没有完整的内容,Python无法理解复合语句。
exec
整个输入作为单个单元:
exec('\n'.join(code_list))
从exec()文档中:
此功能支持动态执行Python代码。 对象必须是字符串或代码对象。 如果是字符串,则将字符串解析为一组Python语句,然后将其执行...
因此,您可以做类似的事情
exec("a=2\nb=3")
exec("if a==2:\n\tprint(a)\nelse:\tprint(b)")
您只需要遵循正确的语法和缩进即可。
在exec()函数中格式化代码的另一种方法是使用三引号,这使查看代码的外观变得容易。
code = """ # Opening quotes
for i in range(0, 10): # Code line 1
print(i) # Code line 2
""" # Closing quotes
exec(code)
如果您要求用户输入代码,这可能行不通,但这可能会派上用场。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.