我正在尝试创建一个__init__.py
文件,它将 *.py 文件中的所有函数从目录导入命名空间(目录的名称)。逻辑如下图所示:
for f in os.listdir(wd):
if not f.endswith('.py') or f == '__init__.py':
continue
names = get_public_functions(open(wd + f))
try:
mod = __import__(f[:-3], fromlist=names)
for fn in names:
fun = getattr(mod, fn)
setattr(sys.modules[__name__], fn, fun)
except Exception as e:
for fn in names:
setattr(sys.modules[__name__], fn, lambda: str(e))
因此,您可以观察到,如果文件中存在语法错误,函数仍然会被导入,但它们会返回语法错误(作为字符串)。
令人沮丧的是,当多个文件中存在语法错误时,我期待的是:
mymodule.fn() => error1,
mymodule.fn2() => error1 (these were from the first file),
mymodule.fn3() => error2 etc.
我只收到最后一条错误消息。我认为错误一定在except
块中,但我想不通。任何人都可以帮忙吗?