如何在Python中执行包含Python代码的字符串?


不要对可能来自程序外部的任何形式的数据使用eval(或exec)。这是一个严重的安全风险。您允许数据的作者在您的计算机上运行任意代码。如果你在这里是因为你想在你的Python程序中按照一个模式创建多个变量,你几乎肯定有一个XY问题。完全不要创建这些变量——相反,适当地使用列表或字典。


当前回答

就像其他人提到的,是“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()

查看eval:

x = 1
print eval('x+1')
->2

最合乎逻辑的解决方案是使用内置的eval()函数。另一种解决方案是将该字符串写入临时python文件并执行。

就像其他人提到的,是“exec”。

但是,如果你的代码包含变量,你可以使用"global"来访问它,也可以防止编译器引发以下错误:

NameError: name 'p_variable'没有定义

exec('p_variable = [1,2,3,4]')
global p_variable
print(p_variable)

记住,从版本3开始,exec是一个函数! 所以总是使用exec(mystring)而不是exec mystring。