如何解决如何在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)\")
行为发生了一些变化,请参见此线程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。