Python3.3中的exec发生了什么?

2024-04-25 14:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着这么做:

def Play(self, logic, board, id):
    exec(logic)
    l = Logic()
    return l.Play(id, board)

logic包含类逻辑的代码。你知道吗

错误是

NameError: global name 'Logic' is not defined

Tags: 代码nameselfboardidplayreturndef
1条回答
网友
1楼 · 发布于 2024-04-25 14:23:01

因为exec()现在是一个函数,所以不能再使用它在Python函数中设置本地名称。你知道吗

在python2中,exec是一个语句,编译器可以检测到它的使用并禁用函数的正常本地名称优化。你知道吗

将代码执行到新字典中:

namespace = {}
exec(logic, namespace)
l = namespace['Logic']()

演示:

>>> logic = '''\
... class Logic:
...     def Play(self, id, board):
...         return id, board
... '''
>>> def Play(logic, board, id):
...     namespace = {}
...     exec(logic, namespace)
...     l = namespace['Logic']()
...     return l.Play(id, board)
... 
>>> Play(logic, 'foo_board', 'bar_id')
('bar_id', 'foo_board')

相关问题 更多 >

    热门问题