ホームページ >バックエンド開発 >Python チュートリアル >Python でのエラー処理: ベスト プラクティス。例外を効果的に処理する方法を調べる
概要:
プログラム エラーは回復できません。プログラムにエラーが発生すると、プログラムはすぐに終了するかクラッシュします。
優れたプログラマーは、コードやソフトウェアが、ソフトウェアの使用中に発生する可能性のあるエラーや例外を、クラッシュしたり望ましくない結果を生み出すことなく適切に処理できることを保証します。数値入力のみを受け入れる金融機関向けのソフトウェアを作成することを想像してください。ユーザーが算術演算で数字の代わりに文字を入力すると、通常はエラーがスローされ、ユーザーが 1 人であるためにソフトウェアがクラッシュします。エラーワードを処理する場所。これは決して良いことではありません。ビジネスにとって悪影響を及ぼし、顧客の不満を招く可能性があり、無能なために誰かが職を失う可能性があります。
この記事では、ユーザーの操作によって発生する可能性のあるコード内のエラーを最適に処理する方法を学びます。乞うご期待。
この記事は次のような方に適しています:
この記事を読み終えると、読者は次のことができるようになります:
エラー と 例外 は、しばしば同じ意味で使用されますが、技術的には異なる意味を持ちます。 Python では、Error と Exception はどちらも BaseException のサブクラスです。たとえ異なっていても、共通点があることを示しています。
エラーは回復できません。プログラムがエラーに遭遇すると、すぐに終了するかクラッシュします。エラーが予想される場合でも、プログラムでエラーを処理する方法はありません。いくつかのエラーを以下に示します:
SyntaxError
:これはプログラマーが直面する最も一般的なタイプのエラーの 1 つであり、コードが正しい Python 構文に従っていない場合に発生し、解析中に検出できます。これは、学習者や他のプログラミング言語から Python に乗り換えた人にとって、容易に生じる疑問です。
<code class="language-python">name = “Austin”; print(name)</code>
Python ではステートメントがセミコロンで終わらないため、結果は SyntaxError
になります。
IndentationError
:このエラーは、Python コードが正しくインデントされていない場合に発生し、コードの解析時に検出されます。 Python ではインデントが非常に重要です。中括弧を使用するほとんどの言語とは異なり、これは Python でコードのブロックを定義できる唯一の方法です。
<code class="language-python">name = “Austin”; print(name)</code>
このコードは、不適切なインデントによりエラーを引き起こします。次のようになります:
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Python では実行時に例外が発生します。エラーとは異なり、プログラムによって適切に処理または捕捉できるため、プログラムはクラッシュすることなく実行を継続できます。言い換えれば、それらは回復可能です。 Python の一般的な例外をいくつか示します:
これらのタイプの例外は、Python プログラミング言語の一部です。それらの一部を以下にリストします:
ValueError
:このエラーは、型が正しい場合でも、無効なパラメーターが関数に渡された場合に発生します。
<code class="language-python">if (active): print(“The user is active”)</code>
上記のコード スニペットから、数値文字列を関数に渡すと、数値に正常に変換されます。それ以外の場合は、ValueError
が生成されます。
<code class="language-python">def str_num(num_string): return(int(string))</code>
TypeError
:このエラーは、不適切な型パラメータが関数に渡されたときに発生します。
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
これにより TypeError
がトリガーされます。
IndexError
:このエラーは、間違ったインデックスを使用してリスト内の値にアクセスしようとすると発生します。
<code class="language-python">def addition(num1, num2): return num1 + num2 # calling the function addition(5, A)</code>
IndexError
にアクセスできないため、結果は my_list[2]
になります。
KeyError
:このエラーは、不正なキーまたは存在しないキーを使用して辞書内の値にアクセスしようとすると発生します。
<code class="language-python">my_list = [“dog”, “cat”] my_list[2]</code>
これにより KeyError
がトリガーされます。
他の組み込み例外はここで見つけることができます。
カスタム例外はプログラマによって定義されます。ここで、Python を使用すると、プログラマーは、プログラムが実行中にチェックする必要がある条件を手動で定義し、見つかった場合は例外をスローできます。これを実現するには、Exception
クラスを継承するクラスを作成します。
例外処理により、アプリケーションのライフサイクル中に発生する特定のエラーが発生した場合でも、ソフトウェア アプリケーションが予測可能なパフォーマンスを発揮できるようになります。このセクションでは、これをプログラミングで実装する方法を学びます。
try-except
ステートメントを使用しますtry-except
ステートメントは、エラーや例外をスローする可能性のあるコードを安全に処理する方法を提供します。 try
ステートメントは、問題のあるコードまたは try
句をラップします。これは、プログラム全体のエラーを引き起こす可能性が最も高いコードの部分です。これは、ユーザーからの入力を受け取るとき、ファイルから読み取るときに発生する可能性があります。いくつか例を挙げてみましょう。
except
ステートメントは except
節の始まりを示します。これは、except
ブロックで囲まれたコードの残りの部分です。 except
句は、try
ブロック内で発生した例外を処理します。
実行ワークフローについて説明します。 Python プログラムは通常、「問題のある」コードを含む try
ブロックに到達するまで実行されます。その時点で try
ブロック内のコードの実行中にエラーの可能性がない場合、except
ブロックはスキップされます。そして続行します 残りのコードベースを実行します。ただし、try
ブロック内のコードの実行中にエラーが発生した場合、例外オブジェクトが作成された直後に、制御は except
ブロックにジャンプし、一致する例外クラスによって処理されます。
<code class="language-python">name = “Austin”; print(name)</code>
上記のコード スニペットから、数値以外の値がプログラムに渡されると、例外オブジェクトが作成され、ValueError
がスローされます。コントロールはすぐに except
ブロックにジャンプし、そこで適切な例外クラスをスキャンします。ここでは、ValueError
クラスで十分です。エラーは正しく処理されました。ただし、正しいクラスが見つからない場合、制御は外側の try
ブロック (存在する場合) に移動し、それでも例外が正しく処理されない場合、プログラムはクラッシュします。
except
ステートメントを使用して複数の例外クラスを処理します複数の例外クラスをチェックし、特定の例外を処理できます。いくつかの例外のうちどれがコードの実行につながったのかわからない場合は、このアプローチをお勧めします。以下のコード スニペットを参照してください。
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Exception
クラスは BaseException
の直接のサブクラスです。 Exception
クラスは、致命的ではないすべての例外の基本クラスです。
ほとんどの場合、コード実行中にスローされるほとんどの例外は、Exception
クラスで十分に処理できます。
<code class="language-python">if (active): print(“The user is active”)</code>
Exception
クラスは致命的ではない例外を処理できますが、注意して使用することをお勧めします。正しい Exception
クラスを使用すると、デバッグに適し、コードの可読性が向上します。
finally
ステートメントを使用しますfinally
ブロックで囲まれたコード部分は、例外が発生したかどうかに関係なく実行されます。これにより、ファイルを閉じたり、メモリ リソースを解放したりするクリーンアップ タスクの処理に適しています。
<code class="language-python">def str_num(num_string): return(int(string))</code>
カスタム例外を作成すると、プログラマはソフトウェア プログラムに対して特定の例外を発生させることができます。これには、特定のソフトウェア プログラムの機能に悪影響を与える可能性のある特殊な条件や特殊なケースが含まれる場合があります。定義されたカスタム例外クラスは、Exception
クラスから継承する必要があります。
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
上記のコード スニペットは、カスタム例外を作成して使用する方法を示しています。ユースケースに応じて、より複雑な方法で使用できます。
エラー/例外処理が重要な理由
「ユーザーを信頼するな」はソフトウェア開発者の間でよく言われる言葉ですが、これは、ユーザーがソフトウェア アプリケーションとどのように対話するか、またどのような入力を行うか完全には分からないことを繰り返し示しています。 、プログラマがアプリケーションを作成するときに行っていること 他にも、考えられなかったかもしれないいくつかの例外的なケースがあります。エラー/例外を適切に処理するためのいくつかの重要な理由を以下に説明します:
例外処理を使用します:
試してみてください: 印刷(10/0) ZeroDivisionError を除く: print("ゼロで割ることはできません!")
print(divide(10, 2)) # 出力: 5.0 print(divide(10, 0)) # 出力: ゼロによる除算は許可されません。
簡潔なコードを書くことを奨励します
例外処理を使用すると、通常のロジックをエラー処理ロジックから分離することで、コードの読み取り、デバッグ、保守が容易になります。
デバッグを容易にする
詳細なエラー メッセージと例外ログにより、開発者はコード内の問題を迅速に特定して修正できます。
例:
試してみてください: 結果=10/0 e としての例外を除く: logging.error("エラーが発生しました", exc_info=True)
結論
プログラミング用語では、エラーと例外はほとんどの場合同じ意味で使用されます。 Python におけるエラーと例外の主な違いは、それらがソフトウェア プログラムにどのような影響を与えるかです。インタプリタがプログラムを解析するときに、構文エラーやインデント エラーなどのエラーが発生すると、プログラムがクラッシュする可能性があります。一方、例外が正しく処理されないと、実行時にプログラムがクラッシュする可能性があります。カスタム例外は、プログラマが特定のソフトウェア アプリケーションに固有の例外クラスを定義できるようにすることで、エラー処理機能を拡張します。
エラー処理もデバッグにとって非常に重要です。これにより、アプリケーションでエラーが発生する理由を確認できるため、ソフトウェア管理者に問題を解決するのに十分な情報が提供されます。ソフトウェア アプリケーションの堅牢性を確保するために、例外処理がコードに適切に導入されていることを常に確認してください。
読んでいただきありがとうございます。
以上がPython でのエラー処理: ベスト プラクティス。例外を効果的に処理する方法を調べるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。