Python如何执行字符串变量内的代码?exec返回None如何解决
问题原因
你拿到None是因为exec()的设计逻辑就是执行传入的Python语句,固定返回None,它不会把内部执行代码的返回值带出来,所以直接给exec()的返回值赋值,永远拿不到你要的函数运行结果。
可行实现方案
方案1:用eval()执行表达式类命令
如果你的字符串内容是单个表达式(比如函数调用、数值计算这类),直接用eval()就行,这个函数会返回表达式执行后的结果,适配你当前的场景:
def func1(): return "Hello" word = "func1()" a = eval(word) print(a) # 输出:Hello
注意:eval()只能执行表达式,不能处理赋值语句、函数定义、循环判断这类多行/语句类代码。
方案2:exec()内显式赋值接收返回值
如果要执行的是复杂语句(不只是单个表达式),可以在执行的字符串里把结果赋值给变量,执行完成后直接读取对应变量即可:
def func1(): return "Hello" word = "res = func1()" exec(word) print(res) # 输出:Hello
如果是在函数等局部作用域下使用,建议显式传入作用域字典,避免作用域解析报错:
def func1(): return "Hello" def run_dynamic_code(): local_scope = {} word = "res = func1()" exec(word, globals(), local_scope) print(local_scope["res"]) # 输出:Hello run_dynamic_code()
注意事项
exec()和eval()都存在代码注入风险,绝对不要执行来源不可信、未经校验的字符串内容,否则可能触发恶意代码执行,造成数据丢失、系统被入侵等问题。- 动态执行代码的调试成本远高于静态写死的代码,非必要场景不建议频繁使用。
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

