DeBug Python神格工具PySnooper

2791 ワード

PySnooperがGitHubで自嘲するのは「乞食版」デバッグツールです。
一般的には、Pythonコードを作成する際に、なぜPythonコードが予定通りに実行されていないのか、どのコードが実行されていないのか、局部変数が何なのかを確認するためには、ブレークポイントや観察モードなどの機能を含むテスターを使ったり、直接print文を使って印刷したりします。
しかし、上記の方法は面倒です。例えば、デバッタを使うには、煩雑な設定が必要です。printを使って印刷するにも注意が必要です。これらに比べて、PySnooperを使用すると、デバッグする関数に装飾器を追加すれば、実行するコード行と実行時間、およびローカル変数が変化する正確な時間を含む実行関数の詳細なロゴが得られます。
「乞食版」というのは、PySnooperが使いやすいからだと信じています。開発者はどんな巨大なコードバンクでも使えます。装飾器を追加してログ出力先のパスを指定します。
GitHubプロジェクトの住所
インストール

pip3 install pysnooper

import pysnooper

@pysnooper.snoop()
def number_to_bits(number):
  if number:
    bits = []
    while number:
      number, remainder = divmod(number, 2)
      bits.insert(0, remainder)
    return bits
  else:
    return [0]

number_to_bits(6)

戻りログは以下の通りです
Starting var:.number=6
21:14:32.099769コール         [email protected]()
21:14:32.099769ライン         5     if number:
21:14:32.099769ライン         6         ビッツ=[]
New var:….bits=[]
21:14:32.099769ライン         7         while number:
21:14:32.099769ライン         8             number、remander=divmod(number、2)
New var:….remander=0
Modified var:.number=3
21:14:32.099769ライン         9             bits.insert(0,remander)
Modified var:.bits=[0]
21:14:32.099769ライン         7         while number:
21:14:32.099769ライン         8             number、remander=divmod(number、2)
Modified var:.number=1
Modified var:.remander=1
21:14:32.099769ライン         9             bits.insert(0,remander)
Modified var:.bits=[1,0]
21:14:32.099769ライン         7         while number:
21:14:32.099769ライン         8             number、remander=divmod(number、2)
Modified var:.number=0
21:14:32.099769ライン         9             bits.insert(0,remander)
Modified var:.bits=[1,1,0]
21:14:32.099769ライン         7         while number:
21:14:32.099769ライン        10         return bits
21:14:32.099769 return      10         return bits
PySnooperの特徴
標準エラー出力が取得しにくい場合、または長すぎる場合、出力をローカルファイルに位置決めすることができます。

@pysnooper.snoop('/my/log/file.log')
いくつかの非ローカル変数の値を調べます。

@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
私たちの関数で関数を呼び出すsnoop行を示します。

@pysnooper.snoop(depth=2)
すべてのsnoop行を、あるプレフィックスで開始し、より容易に位置決めし、見つけます。

@pysnooper.snoop(prefix='ZZZ ')
さらにTensorFlowの様々なテンソル情報を取得することができます。非常に強力です。お母さんはもう心配しなくてもいいです。私はバグが見つけられません。
(209.5.7更新:機能しないことがあります。自分の姿勢が悪いのか、他の原因が分かりません。)
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。