ホームページ >テクノロジー周辺機器 >IT業界 >Pythonエラーをデバッグする方法

Pythonエラーをデバッグする方法

William Shakespeare
William Shakespeareオリジナル
2025-02-15 11:34:14773ブラウズ

Pythonエラーの詳細な理解:IntrospectionとDebuggerを使用した効率的なトラブルシューティング

この記事では、Pythonの内省およびPDBなどのデバッグツールを使用して、プログラムエラーを効率的にデバッグする方法について説明します。この記事は、典型的なエラー情報分析、PDBデバッガーの使用、生産環境のデバッグ、および読者がPythonデバッグスキルを向上させるためのよくある質問の側面から開発されます。

How to Debug Python Errors

Pythonの強力な内省により、ランタイムエラーをより深く理解することができます。関数の呼び出しパラメーターを含むコールスタック内のすべてのフレームをチェックすることにより、エラーをより簡単に再現して理解できます。 Sentryなどのツールは、この機能を最大限に活用して、より豊富なエラーコンテキスト情報を提供します。

一般的なPythonエラーの例を見てみましょう

このエラーメッセージは、エラーのタイプと場所のみを指示しますが、エラーの原因を直接指摘することはできません。 整数または非運動が渡されると推測する必要があるかもしれませんが、実際の状況は多様である可能性があります。
<code>TypeError: expected string or buffer
  File "sentry/stacktraces.py", line 309, in process_single_stacktrace
    processable_frame, processing_task)
  File "sentry/lang/native/plugin.py", line 196, in process_frame
    in_app = (in_app and not self.sym.is_internal_function(raw_frame.get('function')))
  File "sentry/lang/native/symbolizer.py", line 278, in is_internal_function
    return _internal_function_re.search(function) is not None</code>

ログレコードとPDBデバッガー

単純なデバッグ方法は、ロギングを追加することです:

これは、開発中にさまざまなタイプを理解するのに役立ちます。ただし、生産環境では、このアプローチは、デバッグレベルのログの冗長性のために理想的ではありません。
<code class="language-python">import logging
# ...
logging.debug("function is of type %s", type(function))</code>
この時点で、Pythonデバッガー(PDB)が役立ちます。 PDBを使用すると、ブレークポイントを介してコードを介して、変数とそのタイプを確認できます。 コードに

を挿入することで、ブレークポイントを設定できます:

ブレークポイントのヒット後、import pdb; pdb.set_trace()を使用して変数タイプを表示し、

を使用してローカル変数を表示し、
<code class="language-python">def is_internal_function(self, function):
    try:
        return _internal_function_re.search(function) is not None
    except Exception:
        import pdb; pdb.set_trace()
        raise</code>
および

でコールスタックをナビゲートできるPDBインタラクティブ環境に入ります。コマンド。 type(function) locals()down生産環境のデバッグup

生産環境では、CPYTHONランタイムにより、各実行フレームのローカル変数を含む現在のコールスタックにアクセスできます。 トレースバックオブジェクトを含む例外情報を取得できます。 Tracebackオブジェクトを通過することにより、各フレームの属性にアクセスしてローカル変数を表示できます。

Sentryなどのツールは、同様の内省操作を自動的に実行し、コードを手動で追加せずにリッチなエラーコンテキスト情報を提供します。

sys.exc_info() f_locals

<code class="language-python">exc_type, exc_value, tb = sys.exc_info()
inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame
pprint(inner_frame.f_locals)</code>

faq

How to Debug Python Errors この記事では、最終的にPythonエラーのデバッグに関するFAQを提供し、一般的なエラータイプ、PDB使用、IDEデバッグ、例外ハンドリング、リモートデバッグ、マルチスレッドデバッグ、サードパーティライブラリデバッグ、パフォーマンスの問題、デバッグスキルの改善などをカバーします。 。

この記事の一部の内容は、Sentryの記事から採用されています。 SitePointをサポートしてくれたパートナーに感謝します。

以上がPythonエラーをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。