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で例外を処理することが推奨される場面もあります。チェックと実行の間で状態が変わる競合状態(レースコンディション)を避けられる点や、正常系の処理に集中してコードの見通しが良くなる点がメリットです。状況に応じて両者を使い分けるとよいでしょう。
-
Pythonのpass文とは?使い方を徹底解説
Pythonのpass文は、プレースホルダー(置き場所)として機能するキーワードです。for文やif文などの空のコードブロックに記述することで、構文エラーを防ぐことができます。Pythonは、pass文が書かれた部分を「空(何もしない)」として認識します。クラスや関数、処理の中にプレースホルダーを入れたい場面に出くわすことがあります。例えば、大規模なプログラムを書いていてforループを組み込みたいけれど、先に書くべき別のコードがあるため、まだループの中身を実装できないといったケースです。そんなときに役立つのがPythonのpass文です。pass文は、関数・クラス・ループなどのコードブロックを
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実