0
我對python很陌生。這是我遇到的問題。 我已經迷上內建 ._ 導入 _與我的自定義掛鉤從一個字符串加載模塊。無法找到動態加載模塊中定義的功能
def import_hook(name, globals=None, locals=None, fromlist=None):
if name in sys.modules:
obj = sys.modules[name]
return obj
#Make sure we hook only for modules which start with ajay
if name.startswith("ajay"):
statement = '''
print 'inside the ajay module'
def ajay_func():
print 'inside the func'
'''
mod = imp.new_module(name)
mod.__file__ = name
compiled = compile(statement, '<string>', 'exec')
exec compiled in mod.__dict__
sys.modules[name] = mod
return mod
return original_import(name, globals, locals, fromlist)
接着我在其中加載模塊,並調用其功能exec語句的功能使用這個鉤子。
original_import = __builtin__.__import__
def test(request):
statement = '''
import sys
import ajay
def ILessons_1(request):
ajay.ajay_func()
'''
try:
__builtin__.__import__ = import_hook
compiled = compile(statement, '<string>', 'exec')
exec (compiled, globals(), locals()) #in statement_module.__dict__
ajay.ajay_func()
return ILessons_1(request);
finally:
__builtin__.__import__ = original_import
pass
當我運行這段代碼,我得到錯誤行「全局名稱‘阿賈伊’沒有定義」,「返回ILessons_1(要求);」。有趣的是python能夠在這條線上方解析ajay。林相當肯定我在執行語句中犯了一些錯誤,但一直無法弄清楚。
有些請幫我解決這個問題。 感謝