ホームページ >バックエンド開発 >Python チュートリアル >Python でのエラー処理: ベスト プラクティス。例外を効果的に処理する方法を調べる

Python でのエラー処理: ベスト プラクティス。例外を効果的に処理する方法を調べる

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 22:09:43784ブラウズ

Error Handling in Python: Best Practices. Explore how to handle exceptions effectively

概要:

プログラム エラーは回復できません。プログラムにエラーが発生すると、プログラムはすぐに終了するかクラッシュします。

優れたプログラマーは、コードやソフトウェアが、ソフトウェアの使用中に発生する可能性のあるエラーや例外を、クラッシュしたり望ましくない結果を生み出すことなく適切に処理できることを保証します。数値入力のみを受け入れる金融機関向けのソフトウェアを作成することを想像してください。ユーザーが算術演算で数字の代わりに文字を入力すると、通常はエラーがスローされ、ユーザーが 1 人であるためにソフトウェアがクラッシュします。エラーワードを処理する場所。これは決して良いことではありません。ビジネスにとって悪影響を及ぼし、顧客の不満を招く可能性があり、無能なために誰かが職を失う可能性があります。

この記事では、ユーザーの操作によって発生する可能性のあるコード内のエラーを最適に処理する方法を学びます。乞うご期待。

前提条件

この記事は次のような方に適しています:

  • コード内の例外を処理する方法を学びたい Python ソフトウェア開発者。
  • すでに Python に精通していて、Python でのエラー処理の概念を学びたい人。
  • Python エラー処理の知識を向上させたいと考えている既存の専門家。

目標

この記事を読み終えると、読者は次のことができるようになります:

  • Python のエラー処理の概念とその重要性を明確に理解します。
  • カスタム例外クラスとその実装方法について学びます。
  • Python におけるエラーと例外の主な違いを理解します。

エラーと例外の説明

エラー例外 は、しばしば同じ意味で使用されますが、技術的には異なる意味を持ちます。 Python では、ErrorException はどちらも 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 ブロック (存在する場合) に移動し、それでも例外が正しく処理されない場合、プログラムはクラッシュします。

1 つの 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>

上記のコード スニペットは、カスタム例外を作成して使用する方法を示しています。ユースケースに応じて、より複雑な方法で使用できます。

エラー/例外処理が重要な理由

「ユーザーを信頼するな」はソフトウェア開発者の間でよく言われる言葉ですが、これは、ユーザーがソフトウェア アプリケーションとどのように対話するか、またどのような入力を行うか完全には分からないことを繰り返し示しています。 、プログラマがアプリケーションを作成するときに行っていること 他にも、考えられなかったかもしれないいくつかの例外的なケースがあります。エラー/例外を適切に処理するためのいくつかの重要な理由を以下に説明します:

  1. クラッシュを防ぐ 例外処理がないと、未処理のエラーが原因でプログラムが突然クラッシュする可能性があります。これにより、データの損失やユーザー エクスペリエンスの低下が生じる可能性があります。 例: 例外処理なし:
print(10 / 0) # ZeroDivisionError: ゼロによる除算

例外処理を使用します:

試してみてください: 印刷(10/0) ZeroDivisionError を除く: print("ゼロで割ることはできません!")

  1. ユーザーエクスペリエンスの向上 例外が適切に処理されると、不可解なシステム エラーの代わりに意味のあるエラー メッセージが表示されるため、アプリケーションが使いやすくなります。 例:
試してみてください: age = int(input("年齢を入力してください:")) ValueError を除く: print("入力が無効です。数値を入力してください。")
  1. アプリケーションの安定性を維持する これにより、エラーが発生した後でもアプリケーションが実行を継続できるため、安定性が確保されます。 例:
def 除算(a, b): 試す: a/bを返す ZeroDivisionError を除く: return "ゼロによる除算は許可されません!"

print(divide(10, 2)) # 出力: 5.0 print(divide(10, 0)) # 出力: ゼロによる除算は許可されません。

  1. 極端な状況への対処 例外処理を使用すると、ネットワーク障害、ファイルの欠落、無効なユーザー入力などの予測不可能な状況に対処できます。 例:
試してみてください: open("data.txt", "r") をファイルとして使用します: コンテンツ = file.read() FileNotFoundError を除く: print("ファイルが見つかりません。")
  1. 簡潔なコードを書くことを奨励します
    例外処理を使用すると、通常のロジックをエラー処理ロジックから分離することで、コードの読み取り、デバッグ、保守が容易になります。

  2. デバッグを容易にする
    詳細なエラー メッセージと例外ログにより、開発者はコード内の問題を迅速に特定して修正できます。
    例:

インポートログ

試してみてください: 結果=10/0 e としての例外を除く: logging.error("エラーが発生しました", exc_info=True)

  1. 重要なシステムにとって重要 信頼性が重要なシステム (銀行、医療など) では、データの破損や損失を引き起こすことなくエラーを安全に管理するために例外処理が必要です。

結論

プログラミング用語では、エラーと例外はほとんどの場合同じ意味で使用されます。 Python におけるエラーと例外の主な違いは、それらがソフトウェア プログラムにどのような影響を与えるかです。インタプリタがプログラムを解析するときに、構文エラーやインデント エラーなどのエラーが発生すると、プログラムがクラッシュする可能性があります。一方、例外が正しく処理されないと、実行時にプログラムがクラッシュする可能性があります。カスタム例外は、プログラマが特定のソフトウェア アプリケーションに固有の例外クラスを定義できるようにすることで、エラー処理機能を拡張します。

エラー処理もデバッグにとって非常に重要です。これにより、アプリケーションでエラーが発生する理由を確認できるため、ソフトウェア管理者に問題を解決するのに十分な情報が提供されます。ソフトウェア アプリケーションの堅牢性を確保するために、例外処理がコードに適切に導入されていることを常に確認してください。

読んでいただきありがとうございます。

以上がPython でのエラー処理: ベスト プラクティス。例外を効果的に処理する方法を調べるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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