如何在Python中评估任意代码?

问题描述

| 我希望能够评估Python字符串中的任意代码,包括由多个语句组成的代码以及跨越多行的语句。到目前为止,我尝试过使用been0ѭ和
eval
的方法,但是这些方法似乎只能计算表达式。我也尝试过code.InteractiveInterpreter类,但这似乎也只允许使用
eval
exec
或单语句模式进行评估。我尝试按行拆分代码,但这无法处理跨越多行的语句。有没有办法做到这一点?     

解决方法

        
exec
似乎是您想要的:
s = \"\"\"
for i in range(5):
    print(i)
\"\"\"
exec s
版画
0
1
2
3
4
eval()
仅处理表达式,but0ѭ处理任意代码。     ,        你能告诉我您面临
exec
的问题吗?这似乎为我工作。
>>> foo = \"\"\"
... def baz():
...   print \"Hello\"
... \"\"\"
>>> 
>>> exec foo
>>> baz()
Hello
>>> 
exec
也具有
in
形式,您可以在其中将求值结果插入命名空间,这比污染当前值更好。     ,        只是基于sven所说的,使用exec有一个条件部分,它允许在内部执行名称空间的规范,例如,当您可以执行全局名称空间中的exec代码时
exec \"code\" in globals()
或者如果您想指定自己的名称空间,则将其作为命令
di = {}
exec \"code\" in di
    ,        Python 3更新: 就像
print
一样,现在必须在圆括号中使用
exec
exec(\"print(1)\")
行为发生了一些变化,请参见此线程     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...