如何在Python中执行包含Python代码的字符串?
不要对可能来自程序外部的任何形式的数据使用eval(或exec)。这是一个严重的安全风险。您允许数据的作者在您的计算机上运行任意代码。如果你在这里是因为你想在你的Python程序中按照一个模式创建多个变量,你几乎肯定有一个XY问题。完全不要创建这些变量——相反,适当地使用列表或字典。
如何在Python中执行包含Python代码的字符串?
不要对可能来自程序外部的任何形式的数据使用eval(或exec)。这是一个严重的安全风险。您允许数据的作者在您的计算机上运行任意代码。如果你在这里是因为你想在你的Python程序中按照一个模式创建多个变量,你几乎肯定有一个XY问题。完全不要创建这些变量——相反,适当地使用列表或字典。
当前回答
最合乎逻辑的解决方案是使用内置的eval()函数。另一种解决方案是将该字符串写入临时python文件并执行。
其他回答
查看eval:
x = 1
print eval('x+1')
->2
对于语句,使用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
然而,第一步应该是问自己是否真的需要这样做。执行代码通常应该是最后的手段:如果它包含用户输入的代码,那么它就会变得缓慢、丑陋和危险。你应该总是先看看替代方案,比如高阶函数,看看它们是否能更好地满足你的需求。
值得一提的是,如果你想调用一个Python文件,exec的兄弟也存在,叫做execfile。如果你在第三方包中工作,其中包含了糟糕的IDE,而你想在他们的包外编码,这有时是件好事。
例子:
execfile(“path / to /源代码. py”)
or:
执行(open (" - path / to /源代码read . py”)。()
就像其他人提到的,是“exec”。
但是,如果你的代码包含变量,你可以使用"global"来访问它,也可以防止编译器引发以下错误:
NameError: name 'p_variable'没有定义
exec('p_variable = [1,2,3,4]')
global p_variable
print(p_variable)
在本例中,使用exec函数将字符串作为代码执行。
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()