【问题标题】:Reason for error when using exec() within a function in python在 python 的函数中使用 exec() 时出错的原因
【发布时间】:2021-03-14 02:59:19
【问题描述】:

如果我编写如下代码:

lists = ["a='1'", "b='2'", "c=a+b"]
returned_list = []
for x in lists:
    exec(x)
print(c)

它有效,它打印“12”。但是,如果我在函数中使用 exec():

lists = ["a='1'", "b='2'", "c=a+b"]
def test(lst):
    for x in lists:
        exec(x)

    print(c)
test(lists)

它返回NameError: name 'c' is not defined。如何在函数中使用 exec()?

【问题讨论】:

标签: python-3.x exec


【解决方案1】:

当您在函数中分配一个新变量时,您实际上是在一个范围内分配了一个变量,该范围将在函数关闭后关闭。 把它想象成一个气泡,里面有一个物品,在泡沫破灭后,物品也随之消失并消失。这意味着,在 函数 中使用 exec() 会创建一个临时局部变量。但是由于函数有一个预定义的代码,在不直接更改代码的情况下向它们添加新变量,不可能是可能的。在这种情况下,我们需要为 exec 中的每个新变量使用 global 关键字,以使变量保存在 main 而不是函数中。因此,您的列表应该是这样的:

lists = ["global a\na='1'"]

我也不太确定你是否喜欢 a+b 的输出为 12,如果不喜欢,你可以删除每个数字周围的单引号,例如 "a=1" 来制作它们整数

更多信息请查看thisthis

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2018-10-22
    • 2011-10-22
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多