1

impライブラリを使用して、文字列からモジュールをインポートしています (質問しないでください) 。これはすべてうまく機能していますが、そのようなモジュールにエラーがあると、次のようなスタック トレースが表示されます。

Traceback (most recent call last):
  File "<string>", line 33, in do_something
  File "<string>", line 20, in really_do_something
Exception: STRING FILENAME EXAMPLE

モジュールのファイル属性を意味のあるものに設定しようとしましたが、<string>ファイル名は例外トレースバックで引き続き使用されます。

例外で使用されるファイル名を指定する方法についてのアイデアはありますか?

更新:私はこのようにimpを使用しています:動的モジュールのインポートは、すべきでないときに相対インポートを実行しようとしています

4

1 に答える 1

5

ファイル名は、 によって生成されるコード オブジェクトに設定されexec()ます。exec()文字列で使用する代わりにcompile()、コードを個別にコンパイルするために使用する必要があります。そうすれば、ファイル名を設定できます:

code = compile(file_contents, '/your/filename.py', 'exec')
exec(code, mod.__dict__)
于 2012-10-19T15:41:28.043 に答える