Python のデバッグ方法とは何ですか? Python デバッグ コマンドの使い方を 3 分で説明します。

Tomorin
リリース: 2018-08-23 17:47:40
オリジナル
2574 人が閲覧しました

プログラマが一度にプログラムを書いて正常に実行できる確率は非常に低く、基本的には 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!