Python exec() 中的函数未添加到 globals/locals dict

Python functions in exec() not being added to globals/locals dict

我正在使用 python 的 exec() 函数。我正在尝试导入一个模块并定义一个在一个 exec() 调用中使用该模块的函数,然后从另一个 exec() 调用中调用该函数。

像这样:

code1 = "import time
         def foo(i):
             time.sleep(1)
             print(i)"
code2 = "foo('hello')"

custom_globals, custom_locals = {}, {}

exec(code1, custom_globals, custom_locals)
exec(code2, custom_globals, custom_locals)

但是,当我 运行 这段代码时,我得到错误 name 'time' is not defined。这真的很令人困惑,因为如果我执行以下任一操作:

脚本将无误地执行。我对 exec() 有什么误解吗?我知道导入的模块存储在 globals/locals 中,但我想我不太确定方法。我在这里做错了什么?

编辑:在第一个 exec() 调用之后,custom_globals 有它的默认值并且 custom_locals 看起来像这样: {'time': <module 'time' (built-in)>, 'foo': <function foo at 0xa159968c0>}

每个 @juanpa.arrivillaga 的解决方案是只使用一个 vars dict 而不是 global dict 和 local dict,因为“如果 exec 得到两个单独的对象作为全局变量和局部变量, 代码将被执行,就像它嵌入在 class 定义中一样。"