首页 > 解决方案 > 在 python 的函数中使用 exec() 时出错的原因

问题描述

如果我编写如下代码:

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.xexec

解决方案


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

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

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

有关更多信息,请查看


推荐阅读