__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
エラーはブロック内にあるに違いないと思いますが、理解できません。誰か助けてもらえますか?