Python コードをデバッグする方法

動作するコードを書くことは達成感をもたらします。しかし、エラーが発生した場合はその逆になることがよくあります。

ただし、デバッグには、意図しない方法でプログラムを動作させるコード内の障害を削除することが含まれます。

また、他のプログラミング言語と同様、Python でのコーディング中にエラーが発生すると貴重な時間が無駄になる可能性があります。残念ながら、それらを避けることはできません。では、どうすればそれらを理解し、対処できますか?これらは、Python コードをデバッグするための最良の方法の一部です。

Python の例外とは?

Python がコードまたはコマンドを解釈できない場合は常に、例外が発生します。 Python 例外は、Python がコードを実行するときに発生する一連のエラーです。

Python は、 tryおよびexceptブロックを使用してエラーの例外を発生させます。実行可能コマンドは通常、 tryブロック内にあります。

しかし、 try内のコードが失敗すると、Python はexceptブロック内のコードを実行します。

本質的に、 exceptキーワード内のステートメントは、 tryブロック内のステートメントの例外であり、Python はそれらをエラーとして発生させます。

場合によっては、 try…exceptブロックにいくつかの例外 (キーワードを除く) が含まれる場合があります。常に、これはエラーの連鎖につながります。これで、Python で発生することがある典型的な詳細なエラーが説明されています。

組み込み関数、ライブラリ、または Python フレームワークを使用すると、例外が発生する可能性があります。

そのため、正しい構文を書いたとしても、使用しようとしているメソッドのルールに従わないと、例外が発生し、時には圧倒されることがあります。

たとえば、たった 5 行のコードしか書いていないかもしれませんが、Python は 200 行目にエラーでチェックインします。

これは、Python が、使用しているライブラリ、フレームワーク、または組み込みメソッドのソース コード内で事前定義されている例外を発生させるために発生します。

構文エラー

Python は、認識できないコードまたは構文を記述するたびに構文エラーを発生させます。詳細な例外よりも追跡可能です。

Python の初心者は、構文エラーに遭遇する頻度が高くなります。しかし、それらの扱い方を理解すれば、簡単に対処できます。

Python コードをデバッグする方法

Python にはいくつかの例外があります。とりわけ、インデント、タイプ、および名前のエラーが含まれる場合があります。

例外は、1 行または欠陥のあるコード ブロックから発生する可能性があります。残念ながら、例外を処理する特定の方法はありません。ただし、インスタンスとプロジェクト タイプに基づいてそれらを処理できます。

一部のエラーでは、一度に複数の例外が発生します。最終的に、実際のアプリケーションを構築しているときに、これらのエラーに遭遇する頻度が高くなります。

例外はイライラするものですが、辛抱強くさえいれば、それを理解して解決するのにそれほど時間はかかりません。

Python をデバッグするには、次の方法のいずれかまたは組み合わせを使用できます。

1. エラーの説明を確認する

Python エラーを処理する最良の方法の 1 つは、エラーの説明を確認することです。 Python は通常、これをエラー出力の最後の行に示します。

たとえば、解析中の予期しない EOFは常に括弧の欠落に関連しています。ただし、無効な構文はどこかで間違った構文を暗示していますが、クラスまたはオブジェクトから間違った関数を呼び出そうとするとAttributeErrorが発生します。

他にも多くの例外が発生する可能性があります。行をたどるだけで、コードを書き直すことが重要になります。

2. エラーが発生した行を追跡する

ありがたいことに、エラーは Python では行にバインドされています。したがって、エラーが発生した場合は、Python が指している行に注意してください。

たとえば、次の例のエラーは、コードが異なるデータ型 (文字列と整数) を連結しようとするため、型エラーです。

ただし、そのエラーは、サンプル コードの 2 行目を指しています。

コード:

 db = open("output.txt", "a")
a = "Hello"+1
b = "How do you do?"
db.write(a+", "+b+"
")

エラー:

 raceback (most recent call last):
File "C:UsersOmisola IdowuDesktopLato
oup
ew.py", line 2, in
a = "Hello"+1
TypeError: can only concatenate str (not "int") to str

以下の別のエラーの例を見てください。

コード:

 def findTotal(a):
for i in a
print(sum(i)*2)

エラー:

 File "C:UsersOmisola IdowuDesktopLato
oup
ew.py", line 2
for i in a
^
SyntaxError: invalid syntax

ここで、Python は 2 行目の構文エラーを指しています。Python に精通している場合は、 forループの後に欠落しているコロンを見つけるのは簡単です。

3. コマンド ラインでトレース メソッドを活用する

組み込みの IDLE を使用して Python をデバッグすることはできますが、より大きなプロジェクトで作業する場合は、Python を使用しない可能性があります。

したがって、Python をデバッグする最良の方法の 1 つは、コマンドライン インターフェイス (CLI) を使用することです。これは、JavaScript でconsole.log()を実行することと同義です。

コードの実行中にエラーが発生した場合は、CLI を起動し、 traceコマンドを使用して障害のあるスクリプトを実行できます。

コードの各行でチェックを実行し、問題が見つかった場合は分割することで機能します。

この方法を使用するには、コマンド ラインで次のようにファイルを実行します。

 python -m trace --trace file_name.py

このようにスクリプト全体を実行することは現実的ではありませんが、個別の Python ファイルを作成し、コードの各ブロックを (一度に 1 つずつ) そのファイルに貼り付けてから、各コードを個別に実行することができます。

これは単体テスト中に行うことではありませんが、それでも単体デバッグの一種です。

4. コードをテストする

単体テストには、コード内のいくつかのユニット (ブロックまたは行) を分離し、パフォーマンス、効率、正確性などの指標についてテストすることが含まれます。これは、プログラミングにおける品質保証の一形態と考えることができます。

例外に加えて、誤ったブール値が原因でバグが発生することがあります。この場合、エラーは発生しない場合がありますが、展開時にプログラムが異常な動作をする可能性があります。

単体テストでは、いくつかのデバッグ手法を使用して、 assert関数を使用してコードの正確性をテストおよびプロファイルします。コードの実行にかかる時間などもチェックできます。

実稼働中に、通常はtest.pyと呼ばれる個別の Python ファイルを作成し、そのファイル内のコードの各ユニットをテストできます。

単体テストは次のようになります。

 data = {
"guitars":[
{"Seagull":"$260"},
{"Fender":"$700"},
{"Electric-acoustic":"$600"}
]
}
if len(data["guitars"])==2:
for i in data["guitars"]:
print(i)
assert len(data["guitars"])==2, "Length less than what's required, should be 3"

配列の長さが 3 未満であるため、Python はアサーション エラーを発生させます。

 AssertionError: Length less than what's required, should be 3

5. ログを使用する

ログを使用してエラーをチェックすることは、コードをデバッグするもう 1 つの方法です。 Python には組み込みのロギング ライブラリがあります。これは、プログラムがコンソールでどのように実行されるかを詳しく説明することで機能します。

関連: Python で自動化された電子メール メッセージを送信する方法

ただし、ログは、プログラムが展開段階にある場合により役立ちます。ただし、アプリのデプロイ時にコンソールでログを表示することはできませんが、Simple Mail Transfer Protocol (SMTP) を設定して、コード ログを電子メールとして取得できます。

そうすれば、どの時点でプログラムが失敗するかがわかります。

6. 標準の Python デバッガーを使用する

Python には、 pdbと呼ばれる一般的なオンボード デバッガーがあります。組み込みなので、 pdbをテスト ファイルにインポートするだけで機能します。

pdbモジュールは、突然終了するクラッシュ プログラムのデバッグに役立ちます。このモジュールは、コードを事後分析することで機能します (プログラムがクラッシュした後でも)。

pdbを使用して、Python ファイル全体またはそのユニットを実行できます。 pdbが起動したら、それを使用してコードの各行をチェックし、エラーの場所を確認できます。

pdb の使用を開始するには、Python ファイルを開き、次のようにデバッガーを開始します。

 import pdb; pdb.set_trace()

その後、CLI を介して Python ファイル実行できます。

 Python Your_Python_file.py

CMD の括弧内にpdbモジュールが表示されます。 hと入力して、 pdbで使用可能なコマンドのリストを表示します。

 (pdb) h

出力は次のようになります。

たとえば、開始時点からコードを 1 行ずつリストします。

 (pdb) l

7. IDE を使用したデバッグ

統合開発環境 (IDE) も、Python スクリプトをデバッグするための貴重なツールです。

たとえば、 Visual Studio Code は、その実行とデバッグ機能とPylanceと呼ばれる言語サポート プラグインを備えており、コードをデバッグ モードで実行できます。 Pycharmは、コードの欠陥を見つけるのに役立つもう 1 つの優れた IDE です。

関連:アプリを作成するための最高の無料コード エディター

Eclipseには、Python スクリプトを簡単にデバッグするためのPydevというサードパーティのプラグインも用意されています。

8. インターネットで解決策を検索する

また、インターネットは、Python 開発者コミュニティのおかげで、Python コードの問題を解決するための信頼できるリソースでもあります。

たとえば、 Stackoverflowは、質問して答えを得ることができる人気のあるコーディング コミュニティです。遭遇する可能性のあるほとんどの問題は、すでにプラットフォーム全体に解決策があることに気付くでしょう。

さらに、YouTube には、活用できる大量のコーディング ビデオが含まれています。

デバッグはエラーをなくすことだけではありません

エラーはコーディングの不可欠な部分ですが、エラーを処理する方法を知っていると、目立つようになり、コーディングが速くなります。ただし、デバッグはエラーを取り除くだけではありません。場合によっては、動作しているコードがうまく機能しない場合もあります。ピジョンホールを修正する方法を探すこともデバッグの一部です。