我如何在Python中执行一个包含Python代码的字符串?
我如何在Python中执行一个包含Python代码的字符串?
如何在Python中执行包含Python代码的字符串?
绝不要在可以以任何形式从程序外部获取数据的数据上使用eval
(或exec
)。这是一个重大的安全风险。您允许数据的作者在您的计算机上运行任意代码。如果您在这里是因为想按照某种模式在您的Python程序中创建多个变量,您几乎肯定有一个XY问题。根本不要创建这些变量——而是适当地使用列表或字典。
admin 更改状态以发布 2023年5月23日
在这个例子中,使用exec函数将字符串作为代码执行。\n
import sys import StringIO # create file-like string to capture output codeOut = StringIO.StringIO() codeErr = StringIO.StringIO() code = """ def f(x): x = x + 1 return x print 'This is my output.' """ # capture output and errors sys.stdout = codeOut sys.stderr = codeErr exec code # restore stdout and stderr sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ print f(4) s = codeErr.getvalue() print "error:\n%s\n" % s s = codeOut.getvalue() print "output:\n%s" % s codeOut.close() codeErr.close()
对于语句, 可以使用exec(string)
(Python 2/3) 或exec string
(Python 2):
>>> my_code = 'print("hello world")' >>> exec(my_code) Hello world
当你需要一个表达式的值时,可以使用eval(string)
:
>>> x = eval("2+2") >>> x 4
但是,首先应该问问自己是否真的需要。执行代码通常应该是最后的选择:它很慢、难看且如果可以包含用户输入的代码则是危险的。你应该总是首先查看替代方案,例如高阶函数,看看它们是否可以更好地满足你的需求。