You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:24:24