我希望能够从Python中的字符串中评估任意代码,包括由多个语句组成的代码,以及跨越多行的语句。到目前为止我尝试过的方法是使用exec
和eval
,但这些方法似乎只能评估表达式。我也尝试了code.InteractiveInterpreter类,但这似乎只允许使用eval
,exec
或单语句模式进行评估。我已经尝试逐行拆分代码,但这无法处理跨越多行的语句。有没有办法实现这个目标?
答案 0 :(得分:3)
exec
似乎正是您所寻找的:
s = """
for i in range(5):
print(i)
"""
exec s
打印
0
1
2
3
4
eval()
只处理表达式,但exec
处理任意代码。
答案 1 :(得分:3)
您能告诉我您exec
面临的问题吗?这似乎对我有用。
>>> foo = """
... def baz():
... print "Hello"
... """
>>>
>>> exec foo
>>> baz()
Hello
>>>
exec
也有一个in
表单,您可以在其中将评估结果插入到命名空间中,这比污染当前的更好。
答案 2 :(得分:2)
仅仅基于sven所说的有一个条件部分来使用exec,它允许在内部执行命名空间的规范,例如当你可以在全局命名空间中执行exec代码时
exec "code" in globals()
或者如果你想指定你自己的命名空间,请将它命名为dict
di = {}
exec "code" in di
答案 3 :(得分:0)