Pythonエラーをデバッグする方法
Pythonエラーの詳細な理解:IntrospectionとDebuggerを使用した効率的なトラブルシューティング
この記事では、Pythonの内省およびPDBなどのデバッグツールを使用して、プログラムエラーを効率的にデバッグする方法について説明します。この記事は、典型的なエラー情報分析、PDBデバッガーの使用、生産環境のデバッグ、および読者がPythonデバッグスキルを向上させるためのよくある質問の側面から開発されます。
一般的な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>
単純なデバッグ方法は、ロギングを追加することです:
これは、開発中にさまざまなタイプを理解するのに役立ちます。ただし、生産環境では、このアプローチは、デバッグレベルのログの冗長性のために理想的ではありません。
import logging # ... logging.debug("function is of type %s", type(function))
を挿入することで、ブレークポイントを設定できます:
ブレークポイントのヒット後、import pdb; pdb.set_trace()
を使用して変数タイプを表示し、
def is_internal_function(self, function): try: return _internal_function_re.search(function) is not None except Exception: import pdb; pdb.set_trace() raise
でコールスタックをナビゲートできるPDBインタラクティブ環境に入ります。コマンド。 type(function)
locals()
down
生産環境のデバッグup
生産環境では、CPYTHONランタイムにより、各実行フレームのローカル変数を含む現在のコールスタックにアクセスできます。 トレースバックオブジェクトを含む例外情報を取得できます。 Tracebackオブジェクトを通過することにより、各フレームの属性にアクセスしてローカル変数を表示できます。
Sentryなどのツールは、同様の内省操作を自動的に実行し、コードを手動で追加せずにリッチなエラーコンテキスト情報を提供します。
sys.exc_info()
f_locals
exc_type, exc_value, tb = sys.exc_info() inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame pprint(inner_frame.f_locals)
faq
この記事では、最終的にPythonエラーのデバッグに関するFAQを提供し、一般的なエラータイプ、PDB使用、IDEデバッグ、例外ハンドリング、リモートデバッグ、マルチスレッドデバッグ、サードパーティライブラリデバッグ、パフォーマンスの問題、デバッグスキルの改善などをカバーします。 。
以上がPythonエラーをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

これらのトップ開発者ニュースレターを使用して、最新のハイテクトレンドについてお知らせください! このキュレーションされたリストは、AI愛好家からベテランのバックエンドやフロントエンド開発者まで、すべての人に何かを提供します。 お気に入りを選択し、Relを検索する時間を節約してください

ARM64アーキテクチャのオープンソースソフトウェアのCI/CDパズルとソリューション ARM64アーキテクチャにオープンソースソフトウェアを展開するには、強力なCI/CD環境が必要です。ただし、ARM64のサポートレベルと従来のX86プロセッサアーキテクチャには違いがありますが、これはしばしば不利な点にあります。複数のアーキテクチャのインフラストラクチャコンポーネント開発者は、職場環境に一定の期待を持っています。 一貫性:プラットフォーム間で使用されるツールとメソッドは一貫しており、人気の少ないプラットフォームの採用により開発プロセスを変更する必要性を回避します。 パフォーマンス:プラットフォームとサポートメカニズムは、複数のプラットフォームをサポートする際に展開シナリオが不十分な速度によって影響を受けることを保証するための優れたパフォーマンスを備えています。 テストカバレッジ:効率、コンプライアンス、および

カスタマイズされた通信ソフトウェア開発は、間違いなくかなりの投資です。ただし、長期的には、このようなプロジェクトは、市場で既製のソリューションのように生産性を向上させる可能性があるため、より費用対効果が高い可能性があることに気付くかもしれません。カスタマイズされた通信システムを構築することの最も重要な利点を理解してください。 必要な正確な機能を取得します あなたが購入できる既製の通信ソフトウェアには2つの潜在的な問題があります。生産性を大幅に向上させることができる有用な機能が欠けているものもあります。いくつかの外部統合でそれらを強化することができることもありますが、それは常にそれらを素晴らしいものにするのに十分ではありません。 他のソフトウェアには機能が多すぎて、使用できないほど複雑すぎます。おそらくこれらのいくつかを使用しないでしょう(決して!)。通常、多くの機能が価格に追加されます。 あなたのニーズに基づいています

私たちは皆、ZapierやIFTTTなどの従来の自動化プラットフォームの魔法を経験しています。彼らはアプリケーションを接続し、単純な「これの場合、その「その場合」シーケンス:新しいフォームの送信がスプレッドシート行を作成し、着信メッセージがスラックアラートをトリガーするのが得意です。シンプルで効果的で、基本的なタスクのための大きな時間を節約します。しかし、あなたの実際のワークフローはどれほど簡単ですか?ワークフローが微妙なコンテキストを理解したり、エラーを優雅に処理したり、構造化されていないデータを処理したりする必要がある場合、これらのツールはしばしば障害に遭遇します。それらのシンプルさにより使いやすくなりますが、制限にもなります。単純なルールでは不十分な場合:カスタマーサポートを検討してください。チャットクリップ、スクリーンショット、複雑なユーザー図面など、チケットシステムに注がれた非構造化データ
