プログラマが一度にプログラムを書いて正常に実行できる確率は非常に低く、基本的には 1% を超えません。修正が必要なさまざまなバグが常に存在します。いくつかのバグは非常に単純です。エラー メッセージを見ればわかります。いくつかのバグは非常に複雑です。エラーが発生したときにどの変数が正しい値を持ち、どの変数が間違った値を持っているかを知る必要があります。したがって、次のことが必要です。プログラムをデバッグし、バグを修正するための手段の完全なセット。この方法は、プログラミングでは デバッグ コマンド と呼ばれます。
最初の方法は、シンプル、直接的、粗雑で効果的です。これは、print() を使用して、問題がある可能性のある変数を出力します。
def foo(s): n = int(s) print('>>> n = %d' % n) return 10 / ndef main(): foo('0') main()
実行後、出力された変数を探します。出力の値:
$ python err.py >>> n = 0 Traceback (most recent call last): ... ZeroDivisionError: integer division or modulo by zero
print() を使用する最大の欠点は、将来これを削除しなければならないことです。print() がプログラム内のあらゆる場所に存在し、実行結果がジャンク情報も多く含まれています。そこで、2 番目の方法があります。
Assertion
表示を支援するために print() が使用される場合は常に、代わりにアサーションを使用できます。
def foo(s): n = int(s) assert n != 0, 'n is zero!' return 10 / ndef main(): foo('0')
assert の意味式 n != 0 が True である必要があります。そうでない場合、プログラム動作のロジックに従って、次のコードは間違いなく間違っています。
アサーションが失敗すると、assert ステートメント自体が AssertionError をスローします:
$ python err.py Traceback (most recent call last): ... AssertionError: n is zero!
プログラムがアサートでいっぱいの場合、print() と同じになります。ただし、-O パラメータを使用すると、Python インタープリタの起動時にアサートをオフにすることができます。
$ python -O err.py Traceback (most recent call last): ... ZeroDivisionError: division by zero
これをオフにすると、すべてのアサート ステートメントをパスとして表示できます。
logging
print() をlogging に置き換えるのが 3 番目の方法です。assert と比較すると、logging はエラーをスローせず、ファイルに出力できます:
import logging s = '0' n = int(s) logging.info('n = %d' % n) print(10 / n)
logging .info() はテキストを出力できます。実行しても、ZeroDivisionError 以外の情報は見つかりません。どうしたの?
心配しないでください。ログをインポートした後に構成の行を追加して、もう一度お試しください:
import logging logging.basicConfig(level=logging.INFO)
出力を参照してください:
$ python err.py INFO:root:n = 0 Traceback (most recent call last): File "err.py", line 8, in <module> print(10 / n) ZeroDivisionError: division by zero
これはログの利点であり、これにより次のことが可能になります。レコードを指定します。情報のレベルには、デバッグ、情報、警告、エラーなどが含まれます。level=INFO を指定すると、logging.debug は機能しません。同様に、level=WARNING を指定すると、debug と info が機能しなくなります。このようにして、さまざまなレベルの情報を削除せずに安全に出力でき、最終的にどのレベルの情報を出力するかを制御できます。
ロギングのもう 1 つの利点は、簡単な構成で、ステートメントをコンソールやファイルなどの異なる場所に同時に出力できることです。
以上がPython のデバッグ方法とは何ですか? Python デバッグ コマンドの使い方を 3 分で説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。