標題似乎很愚蠢,但我不知道如何精確地表達它,抱歉。Python:如何訪問eval的全局變量()裏面的eval
我有一個程序,需要評估一些用戶代碼(通過RestrictedPython的安全性),我想把一個函數放入eval的全局變量中,以便在eval時可以打印出一些調試信息給我):
class UserException(Exception):
pass
def err(msg):
# ? how to get the globals variable in eval ?
A = globals().get('A', 'A not found')
return UserException("%s and A's value is %r" % (msg, A))
g = {
'err': err,
'A': None,
'__builtins__': {},
}
print eval('A or err("A not true")', g)
這會給resut:
A not true and A's value is 'A not found'
使用 '全局()' 在這裏insde '犯錯' 當然是錯誤的。但是我怎麼能在'err'裏面得到'g'的值呢?
是的,這就是我要找的。我使用檢查模塊來達到同樣的效果。 – jayven