Python での例外処理

Mary-Kate Olsen
リリース: 2024-12-06 20:19:12
オリジナル
749 人が閲覧しました

Exception Handling in Python

この記事では、try-excel ブロッ​​ク、カスタム例外、例外チェーンやエンリッチメントなどの高度な機能など、Python で例外を処理するために使用されるさまざまな手法について説明します。


Python は、プログラマがクラッシュを防ぐコードを実装できるだけでなく、フィードバックを提供してアプリケーションの安定性を維持できる堅牢な例外処理フレームワークを提供します。さらに、開発者は Try-Except ブロックやカスタム例外などの構造を使用してエラーを適切に管理できます。

- Try-Except ブロック

try-Except ブロックでは、例外を発生させる可能性のあるコードが try ブロック内に配置され、例外ブロックは例外が発生した場合に実行するアクションを指定します (Python Software Foundation、未確認)。

例:

try:
    result = 1 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
ログイン後にコピー
ログイン後にコピー

1 つの try-Except ブロックで複数の例外をキャッチするには、複数の例外ブロックを持つ try-ブロックを使用して、例外タイプごとに特定の応答を生成できます。または、タプルを使用して、単一の例外式で複数の例外をキャッチすることもできます。

例:

# One try block and several except blocks
try:
    result = 1 / 'a'
except ZeroDivisionError:
    print("Cannot divide by zero.")
except TypeError:
    print("Type error occurred.")

# One try block and one except tuple block
try:
    # some operation
    result = 1 / 'a'
except (ZeroDivisionError, TypeError) as e:
    print(f"Error occurred: {e}")
ログイン後にコピー
ログイン後にコピー

- Else 条項

else 句は、try-excel ブロッ​​クの後に配置され、try ブロックが例外を発生させない場合に実行されます。

例:

try:
    result = 1 / 2
except ZeroDivisionError:
    print(“Cannot divide by zero.”)
else:
    print(“Division successful.”)
ログイン後にコピー

-Finally 節

finally 節は常に try ブロックまたは任意の例外ブロックの後に配置されます。これには、例外が発生した場合でも、通常はファイルやネットワーク接続などのリソースをクリーンアップするために、何があっても実行されるコードが含まれています。

例:

try:
    result = 1 / ‘a’
except ZeroDivisionError:
    print(“Cannot divide by zero.”)
except TypeError:
    print(“Type error occurred.”)
else:
    print(“Division successful.”)
finally:
    print(“Goodbye, world!”)
ログイン後にコピー
  • レイズステートメント

例外の発生: raise 句は、通常、特定の条件が満たされていないことを示すために、例外を強制的に発生させることによって例外を発生させます。

例:

if ‘a’ > 5:
    raise ValueError(“A must not exceed 5”)
ログイン後にコピー

- 例外チェーン

raise 句を使用して例外を連鎖させることができます。これは、元のエラーにコンテキストを追加する場合に便利です。


try:
    open(‘myfile.txt’)
except FileNotFoundError as e:
    raise RuntimeError(“Failed to open file”) from e
ログイン後にコピー

- カスタム例外

Exception クラスまたは他の組み込み例外クラスから継承することで、独自の例外クラスを定義できます (Mitchell、2022)。

例:

class My_custom_ (Exception):
    pass

try:
    raise MyCustomError(“An error occurred”)
except MyCustomError as e:
    print(e)
ログイン後にコピー

- 例外の充実

add_note() メソッドを使用して、カスタム メッセージやメモを例外オブジェクト (別名 e) に「追加」することで、例外に情報やコンテキストを追加できます。

例:

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError as e:
        e.add_note(“Cannot divide by zero”)
        e.add_note(“Please provide a non-zero divisor”)
        raise
try:
    num1 = 10
    num2 = 0
    divide_numbers(num1, num2)
except ZeroDivisionError as e:
    print(“An error occurred:”)
    print(str(e))
ログイン後にコピー

例外の処理は、次のような理由から重要です。

  1. プログラムのクラッシュを防止: 未処理の例外によりプログラムがクラッシュし、データ損失やユーザー エクスペリエンスの低下につながる可能性があります。
  2. 意味のあるエラー メッセージを提供する: 例外を処理することで、何が問題で、その修正方法を理解するのに役立つ有益なエラー メッセージをユーザーに提供できます。
  3. 正常な機能低下が可能: 例外処理により、エラーが発生した場合でもプログラムの実行を継続できます。

簡単なプログラムエラー処理の例:

try:
    result = 1 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
ログイン後にコピー
ログイン後にコピー
# One try block and several except blocks
try:
    result = 1 / 'a'
except ZeroDivisionError:
    print("Cannot divide by zero.")
except TypeError:
    print("Type error occurred.")

# One try block and one except tuple block
try:
    # some operation
    result = 1 / 'a'
except (ZeroDivisionError, TypeError) as e:
    print(f"Error occurred: {e}")
ログイン後にコピー
ログイン後にコピー

要約すると、Python は、プログラムが突然失敗することなく予期せぬ状況を処理できるようにする包括的な例外処理フレームワークを提供します。 Try-Except ブロック、カスタム例外、例外チェーンやエンリッチメントなどの高度な機能などの構成を利用することで、開発者はプログラムの回復力が高く、ユーザーフレンドリーで、予期しないシナリオを適切に処理できることを保証できます。


参考文献:

ミッチェル R (2022 年 6 月 13 日)。カスタム例外。 _Python エッセンシャル トレーニング _[ビデオ]。 LinkedIn ラーニング。 https://www.linkedin.com/learning/python-essential-training-14898805/custom-Exceptions?autoSkip=true&resume=false&u=2245842

Python ソフトウェア財団。 (未確認)。 8.エラーと例外。パイソン。 python.org.


元々は、2024 年 8 月 21 日に「Python の例外処理 - Medium」で公開されました。

以上がPython での例外処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート