Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのifステートメント内で例外を処理する方法

ifステートメントの中で発生しうるエラーを安全に扱うには、try〜except構文を組み合わせるのが基本です。if文による事前チェックだけに頼らず、条件に応じて例外を明示的に発生させて捕捉することで、予期しない状況にも柔軟に対応できるコードになります。

if文とtry-exceptを組み合わせた例外処理のコード例

以下の例では、変数bが0でない場合は除算を実行し、0である場合には意図的にZeroDivisionError(ゼロ除算エラー)を発生させています。発生した例外はexceptブロックで捕捉され、エラーメッセージとして出力されます。

a, b = 5, 0

try:
    if b != 0:
        print(a / b)
    else:
        # bが0の場合は明示的に例外を発生させる
        raise ZeroDivisionError("integer division or modulo by zero")
except Exception as e:
    print(e)

このプログラムを実行すると、次のような出力が得られます。

integer division or modulo by zero

コードのポイント解説

1. tryブロック
エラーが発生する可能性のある処理(ここではif文による分岐と除算)を記述します。この中で例外が起きると、以降の処理は中断されてexceptブロックへ移行します。

2. raise文
条件に応じて自分で例外を発生させることができます。ZeroDivisionErrorのような組み込み例外だけでなく、独自の例外クラスを指定することも可能です。

3. exceptブロック
tryブロック内で例外が発生した場合にのみ実行されます。「as e」と書くことで、例外オブジェクトを受け取り、エラー内容を出力したりログに記録したりできます。

4. Exceptionクラスについて
Exceptionはほぼすべての例外の基底クラスのため、広範囲に例外を捕捉できます。ただし、実運用ではZeroDivisionErrorなど具体的な例外型を指定したほうが、意図しないバグまで握りつぶすリスクを避けられます。

補足:例外を使わないシンプルな代替アプローチ

そもそもif文でbが0かどうかを事前に確認すれば、例外を発生させずに処理を分岐させることも可能です。

a, b = 5, 0

if b != 0:
    print(a / b)
else:
    print("ゼロで割ることはできません")

ただし、EAFP(「許可よりも謝罪を求める」)と呼ばれるPythonらしいスタイルでは、あえてtry〜exceptで例外を処理することが推奨される場面もあります。チェックと実行の間で状態が変わる競合状態(レースコンディション)を避けられる点や、正常系の処理に集中してコードの見通しが良くなる点がメリットです。状況に応じて両者を使い分けるとよいでしょう。


  1. Pythonのpass文とは?使い方を徹底解説

    Pythonのpass文は、プレースホルダー(置き場所)として機能するキーワードです。for文やif文などの空のコードブロックに記述することで、構文エラーを防ぐことができます。Pythonは、pass文が書かれた部分を「空(何もしない)」として認識します。クラスや関数、処理の中にプレースホルダーを入れたい場面に出くわすことがあります。例えば、大規模なプログラムを書いていてforループを組み込みたいけれど、先に書くべき別のコードがあるため、まだループの中身を実装できないといったケースです。そんなときに役立つのがPythonのpass文です。pass文は、関数・クラス・ループなどのコードブロックを

  2. Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例

    Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実