2

私は、大規模 (356 ファイル) の複雑な Python プログラムがどのようにセットアップされるかを学んでいます。コードを手動で読み込んで解析する以外に、プログラムの流れをたどる良い方法はありますか?

私が便利だと思う2つの方法があります:

  1. Bash の「set -x」に似たもの
  2. 出力の各行を出力するファイルを表示するもの

上記を実行する方法、または有用だと思われる他の方法はありますか?

4

4 に答える 4

1

非常に面倒かもしれませんが、デバッガーを使用して実行の流れを追跡すると、命令ごとにある程度役立つ可能性があります。

import pdb
pdb.set_trace()
于 2014-01-04T00:11:50.293 に答える
1

これが実際に良いアイデアかどうかはわかりませんが、標準出力への出力の各行の前にファイルと行を表示するためのフックを実際に書いたので、それをあなたに渡すこともできます…</p>

import inspect, sys

class WrapStdout(object):
    _stdout = sys.stdout
    def write(self, buf):
        frame = sys._getframe(1)
        try:
            f = inspect.getsourcefile(frame)
        except TypeError:
            f = 'unknown'
        l = frame.f_lineno
        self._stdout.write('{}:{}:{}'.format(f, l, buf))
    def flush(self):
        self._stdout.flush()

sys.stdout = WrapStdout()

それをモジュールとして保存するだけで、その後import、標準出力のすべてのチャンクにファイルと行番号がプレフィックスとして付けられます。

もちろん、次の場合、これはかなり醜くなります。

  • 誰でも部分的な行を印刷しようとします (stdout.write直接、またはprint2.x またはend=''3.x ではマジック コンマを使用して)。
  • 2.x で Unicode と非 Unicode を混在させます。
  • いずれのソース ファイルにも長いパス名があります。

しかし、トリッキーなディープ Python マジック ビットはすべてそこにあります。その上に非常に簡単に構築できます。

于 2014-01-04T00:09:04.633 に答える
0

相互参照プログラムを探すことができます。これを行うpyxrという古いプログラムがあります。相互参照の目的は、クラスが相互にどのように参照されているかを知らせることです。IDE の中には、この種のことを行うものもあります。

于 2014-01-04T00:08:53.037 に答える