1
我試圖做到這一點:在Python3.3中發生了什麼與exec?
def Play(self, logic, board, id):
exec(logic)
l = Logic()
return l.Play(id, board)
logic
包含類邏輯的代碼。
的錯誤是
NameError: global name 'Logic' is not defined
我試圖做到這一點:在Python3.3中發生了什麼與exec?
def Play(self, logic, board, id):
exec(logic)
l = Logic()
return l.Play(id, board)
logic
包含類邏輯的代碼。
的錯誤是
NameError: global name 'Logic' is not defined
因爲exec()
現在是一個函數,可以不再使用Python中的函數來設置本地名稱。
在Python 2中,其中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')
@BhargavRao:實際上,這個職位不解釋這裏發生了什麼接近。請參閱[Python 2和Python 3中的exec函數的行爲](http://stackoverflow.com/q/15086040)。 –
@MartijnPieters是的,其他更好。謝謝 –