を使用してファイルからオブジェクトをロードしたいeval
。そのオブジェクトは、有効な Python 式になるようにファイルにダンプされます。すべての型は、次のように fqdn で指定されます。
mod1.Class1(
attr1=mod2.Class2(a=1,b=2),
attr2=[1,2,3,4],
attr3=mod1.submod1.Class3(),
)
これを にフィードするとeval
、これらのモジュールのすべてがeval
が呼び出されたスコープにインポートされるわけではないNameError: name 'mod1' is not defined
ため、最上位のモジュールを取得するか、それらがインポートさAttributeError: 'module' object has not attribute 'submod1'
れるとサブモジュールを取得します。
それを処理する優雅な方法はありますか?を解析NameError
、実行__import__
、再試行することはできますeval
が、 から何が問題なのかを取得する方法がわかりませんAttributeError
。
に式をフィードしcompile
、AST を調べて、必要なものをインポートできますか? ただし、AST を使用したことはありませんが、その例はありますか?
ここではセキュリティには関心がないことに注意してください。