首页 > 解决方案 > Exec 不会使用在 exec 中定义的变量更新当前命名空间

问题描述

假设我有以下文件:

foo.py

x = 1

主文件

f():
  exec(("foo.py").read())
  print(x)

f()

如果我运行 main.py,我会得到“名称 x 未定义”。我知道这与 f() 是一个函数有关,因为如果我删除该函数并只运行 exec 并打印它就可以正常工作。如何让 exec 使用在 exec 正在运行的代码中声明的变量更新我当前的命名空间?

背景:我可以想象人们说我根本不想这样做,所以让我解释一下为什么我想要这种行为。我要执行的文件是 input1 = x、input2 = y、...、correct_output = z 形式的测试用例。我希望能够将测试用例文件的内容复制到学生的提交中,然后在对文件进行最少修改或不修改的情况下调用学生的函数。

例如,我可以将测试用例放在一个函数中,然后代替 exec,导入测试用例文件并运行该函数,但是当导师试图手动运行测试用例时,这需要额外点击几下,我最好避免。

标签: python-3.xscopenamespacesexec

解决方案


推荐阅读