【问题标题】:Python NameError: "name 'x' is not defined" when used inside for loopPython NameError:“名称'x'未定义”在for循环中使用时
【发布时间】:2019-04-27 03:08:20
【问题描述】:

我正在尝试在 Python 3.7 中运行以下文件:

文件名:mytest.py 内容:

def test():
    exec("x=2")
    exec("if x==2: print('yes')")
    exec("[l for l in [1,2,3] if l==x]")

if __name__ == "__main__":
    test()

当我运行命令时:

python3 mytest.py

前两行 test() 工作正常。但是第三行给出了以下错误:

NameError: 名称“x”未定义

如果我直接在 Python Shell 中运行 test() 的内容或将 test() 的内容放在 ma​​in 中,则不会发生错误。

注意,在我的实际代码中,我事先并不知道变量名l和x,也不知道exec里面需要的代码。这只是一个简化的例子。

【问题讨论】:

  • 如果我运行所有行,那么最后一个工作没有问题。如果我在没有第一个的情况下运行,那么第二行会出错。所以我不必运行第三行来获取错误。一切都取决于第一行。 Python 3.7 / Linux Mint 19.1
  • 我在 Python 2.7 上进行了测试 - 如果我运行第一行,我不会收到错误消息。如果我不使用第一行,我会在第二行和第三行出错。
  • 仔细检查您问题中的代码是否与给您错误的代码相同。
  • 您的代码在 2.7 和 3.7 中非常适合我!你是如何运行它的?
  • 不要使用exec()。 Python 足够动态,可以处理各种变化的名称。

标签: python exec


【解决方案1】:

你用的是什么版本的python,在v3.7上试过同样的命令,运行良好

【讨论】:

  • 谢谢。我正在使用 Python 3.7。我意识到如果我从 Python shell 运行代码,则不会发生错误。但是,我需要从函数内部执行此操作。我已经相应地更新了我的问题。任何想法为什么会发生这种情况?
【解决方案2】:

我可以通过以下方式解决这个问题:

globals()['x'] = 2
exec("[l for l in [1,2,3] if l==x]", globals())

但这不是一个好的解决方案。

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2013-11-25
    相关资源
    最近更新 更多