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

为何exec(f"module.{function}")返回NoneType而非执行目标函数?

问题分析与解决

首先明确核心事实:exec本身不会返回执行代码产生的返回值,它仅负责执行传入的代码字符串——无论你用f-string拼接还是直接写死字符串,exec的返回值都是None,这是exec的特性,和f-string无关。

你觉得exec("flscript.Number('hp',100)")“正常执行”,其实只是函数被调用了,但返回的字典根本没被保存下来;而用f-string拼接时,你同样只是执行了函数调用,没把结果赋值给变量,自然拿不到预期的字典。

正确解决方法

你需要在exec执行的代码字符串里完成赋值操作,把函数返回的字典绑定到一个变量上,之后再从作用域中获取这个变量:

# 假设你的value是"Number('hp',100)"
value = "Number('hp',100)"
# 构造包含赋值逻辑的代码字符串
exec(f"health = flscript.{value}")
# 现在可以直接使用health变量
print(health)

如果不想污染全局作用域,还可以通过exec的locals参数单独接收结果:

value = "Number('hp',100)"
local_scope = {}
exec(f"result = flscript.{value}", globals(), local_scope)
health = local_scope['result']
print(health)

总结

  • exec完全支持f-string拼接,你的问题和f-string无关
  • exec不返回执行代码的结果,必须在执行的代码里主动把结果赋值给变量
  • 把赋值逻辑写进exec的代码字符串,是获取函数返回值的唯一方式

内容的提问来源于stack exchange,提问作者rezarg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:18