【发布时间】: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() 的内容放在 main 中,则不会发生错误。
注意,在我的实际代码中,我事先并不知道变量名l和x,也不知道exec里面需要的代码。这只是一个简化的例子。
【问题讨论】:
-
如果我运行所有行,那么最后一个工作没有问题。如果我在没有第一个的情况下运行,那么第二行会出错。所以我不必运行第三行来获取错误。一切都取决于第一行。 Python 3.7 / Linux Mint 19.1
-
我在 Python 2.7 上进行了测试 - 如果我运行第一行,我不会收到错误消息。如果我不使用第一行,我会在第二行和第三行出错。
-
仔细检查您问题中的代码是否与给您错误的代码相同。
-
您的代码在 2.7 和 3.7 中非常适合我!你是如何运行它的?
-
不要使用
exec()。 Python 足够动态,可以处理各种变化的名称。