1

私はPEP 302に従ってインポート フックを作成しました。存在しないモジュールをインポートしようとするコードなど、インポート エラーが発生した場合、次のような行でトラックバックが表示されます。

File "<string>", line 10, in helloEnv

10行目は、存在しないインポートへの呼び出しが存在する場所ですが、ファイル名はなく、<string>. 私のインポートフックは、 PEP 302
の最小のものとほとんど同じです。モジュールの作成では、常に適切な文字列値を に設定し、正しい値が に設定されていることを確認します。また、モジュールのとの両方が有益な情報を返します。__file__new_module()__name__str()repr()

トラックバック内のこれらの名前のないファイルにより、インポート エラーのデバッグが困難になります。トラックバックはどこからファイル名を取得しますか? モジュールの名前が表示されないのはなぜですか?


編集-もう少し考えてみると、おそらくモジュールコードがを使用して実行されているためexec()です。exec()ファイル名を指定することは可能ですか?

4

1 に答える 1

0

わかりました、それでそれは簡単でした。それ以外の

exec(code, mod.__dict__)

書きます:

exec(compile(code, fullname, "exec"), mod.__dict__)
于 2012-05-10T09:39:35.893 に答える