1

デバッグの目的で、インポートを行った後に操作している名前空間とモジュールを確認し、さらに関数が呼び出された場所を確認できるかどうか疑問に思っていました。

コードに関数 f(x) とかなり複雑な構造がある場合、どこにでもプリントを追加せずに f(x) が呼び出されている場所を確認する方法はありますか?

f.print_occurance() のようなもの

"f was called in function integrate"
"f was called in function linspace"
"f was called in function enumerate"

これに似た何か。

最初の質問については、モジュール「import somemodule」をインポートするとします。そのモジュールが他のモジュールをインポートする場合、somemodule.py (またはヘッダー ファイルが存在する場合は、そのヘッダー ファイルが存在する場合) を検索せずに、どの名前空間とモジュールがインポート/使用されているかを確認できますか? c/cpp で)。

これが初心者の質問である場合は申し訳ありませんが、エラー処理とデバッグについて知っておくべき基本的なトリックのように思えますが、グーグルは有用なものを返しませんでした。

4

2 に答える 2

2

独自のf.print_occurence()属性を作成できる可能性があります。関数の開始時に「true」のフラグを立てる変数を作成すると、f.print_occurence()がフラグを認識し、それに応じて出力します。

于 2012-10-29T17:39:07.800 に答える
1

tracebackinspectモジュールを必ず確認してください。

これを行う簡単な方法は次のとおりです。

traceback.print_stack(limit=2)

これは醜いですが、どの関数が呼び出され、何が呼び出されたかを教えてください。ニーズに合わせてモジュールを使用する方法については、モジュールを参照してください。

インポートされたモジュールはsys.modulesで見ることができます

于 2012-10-29T17:44:08.547 に答える