python 3中exec函数的stan行为

时间:2015-12-01 01:43:52

标签: python

为什么这段代码不起作用?

class wrapper(dict):
    pass

script = """
def foo():
    print(10)

foo()
"""
exec(script, wrapper())

当我跑步时,我收到了这条消息:

File "test.py", line 29, in <module>
exec(script, wrapper())
 File "<string>", line 5, in <module>
 File "<string>", line 3, in foo
KeyError: 'print'

如果我将最后一行更改为

exec(script, {})

然后一切都好。

我无法理解,为什么完全透明的字典继承会改变脚本行为?

2 个答案:

答案 0 :(得分:0)

这里只是您问题的结论-感谢其他用户的评论

使用最新的python版本将使您的代码正常工作

例如我在PyCharm中使用了最新的3.8.x,并且运行正常

enter image description here

答案 1 :(得分:-1)

请使用python 3.7 ------您的代码对我来说正常工作