【问题标题】:exec has different side effects in different contexts? [duplicate]exec 在不同的情况下有不同的副作用? [复制]
【发布时间】:2021-05-14 11:38:35
【问题描述】:

我正在编写一个涉及 codegen 的库,我想测试我生成的代码是否符合我的预期。我想生成代码,exec 它,然后验证结果是否符合我的预期。但是,我发现当我在测试函数中执行此操作时,我在生成的代码中设置的变量不可见。例如,这非常有效:

exec('a = 1')
print(a)

但是,这失败了 NameError:

def demo():
    exec('b = 2')
    print(b)

demo()

什么给了?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

遗憾的是,据我了解,您不能像在函数中那样使用 exec。相反,您可以将其存储在字典中,如下所示。

def demo():
    varDict = {}
    exec("b=2", varDict)
    print(varDict["b"])
demo()

输出

2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多