所有
我正在组建一个需要动态加载模块然后在其中创建类实例的系统。
我的代码是:
tokens = os.path.splitext("a.b.c")
try:
module_str = str(tokens[0])
task_class_str = str(tokens[1][1:])
module = __import__(module_str, fromlist=[task_class_str])
task_class = getattr(module, task_class_str)
except Exception, e:
STDOUT.error("Failed to import task module", module=module_str, task_class=task_class_str, exception=e)
continue
try:
task = task_class(task)
except Exception, e:
STDOUT.error("Failed to create task", task=task, module=module, task_class=task_class, exception=e)
continue
错误是:
[ERROR]: 'Failed to create task' task_class=<class a.b.c at 0x7fd3beb13e88> exception=ImportError('No module named c',) task=<d.e instance at 0x25700e0> module=<module 'a.b' from '.../a/b/__init__.pyc'>
类c的定义包含在a/b/__init__.py
中。当日志记录显示该类已绑定时,为什么要尝试将该类作为模块导入?
答案 0 :(得分:0)
使用
创建任务对象时task = task_class(task)
任务未初始化。你试图这样做吗?:
task = task_class()
另外你说c的定义是在“init.py”中。但他们的代码是,它会读取文件“a.b.py”。
答案 1 :(得分:0)
忽略问题。
问题是c类中存在逻辑错误。实例化时,构造函数失败。目前还不清楚为什么报告的错误是关于在类中存在代码错误时丢失的模块。