を使用してファイルからオブジェクトをロードしたい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 を使用したことはありませんが、その例はありますか?
ここではセキュリティには関心がないことに注意してください。