このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】例外処理を使わないエラー処理

例外処理を使わないエラー処理
例外処理を使わないエラー処理は、プログラムの本来の処理とエラー対応のコードが混在してしまい、全体の流れが分かりにくくなるという欠点があります。ここでは、例外処理を使わずに、入力内容を事前にチェックしてエラーを検出・対応する方法について解説します。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.例外処理を使わないエラー処理の概要
プログラム実行中、ユーザーが不適切な入力(例えば、数字以外の文字列や 0 での除算)を行った場合、Pythonでは通常例外が発生し、プログラムが強制終了してしまいます。例外処理を使わずにエラーに対処する場合、入力値が正しいかどうかを事前に確認し、問題があればエラーメッセージを表示して最初から再入力を促す、といった処理を行います。以下の表は、チェックすべきエラー条件とそれぞれのエラーメッセージの例です。
エラー条件 | エラーメッセージ |
---|---|
入力が数字以外の場合 | "Input an integer." |
除数が 0 の場合 | "Divisor must not be 0." |
2.プログラム例と詳細な解説
ここでは、被除数(dividend)と除数(divisor)を入力し、整数の割り算の結果を表示するプログラムを例に説明します。このプログラムは、以下の手順で動作します。
while True:
で無限ループを開始。Ctrl + Cなど(JyupyterLabでは■ボタン)で手動終了します。- ユーザーから入力された文字列が数字のみで構成されているかを、文字列の isnumeric() メソッドで確認する。
- 数字以外の入力や、除数が 0 である場合にはエラーメッセージを表示し、仕切りとして 25 個のハイフンを出力して、次のループへ移行する。
- 入力が正しい場合、整数に変換して割り算を行い、結果を表示する。
以下にサンプルコードを示します。
while True:
# 被除数の入力
dividend = input("Dividend: ")
if not dividend.isnumeric():
print("Input an integer.")
print("-" * 25)
continue # 入力が不正な場合はループの先頭に戻る
# 除数の入力
divisor = input("Divisor: ")
if not divisor.isnumeric():
print("Input an integer.")
print("-" * 25)
continue # 入力が不正な場合はループの先頭に戻る
if int(divisor) == 0:
print("Divisor must not be 0.")
print("-" * 25)
continue # 除数が 0 の場合は再入力を促す
# 入力が正しい場合は整数に変換
dividend = int(dividend)
divisor = int(divisor)
# 整数の割り算の結果を表示
print("Result:", dividend // divisor)
print("-" * 25)
実行結果
Dividend: 10
Divisor: 2
Result: 5
-------------------------
Dividend: 20
Divisor: 0
Divisor must not be 0.
-------------------------
Dividend: abc
Input an integer.
-------------------------
詳しい解説
- まず、
while True:
によって無限ループを作成し、ユーザーからの入力を繰り返し受け付けます。 dividend = input("Dividend: ")
で被除数の入力を受け取り、dividend.isnumeric()
により、入力が数字のみで構成されているか確認します。数字以外が含まれていればエラーメッセージを表示し、continue
文でループの先頭に戻ります。- 同様に、
divisor
についても数字以外が含まれていないかチェックし、さらにint(divisor) == 0
で除数が 0 でないか確認します。除数が 0 の場合、ゼロ除算を防ぐためエラーメッセージを表示して再入力を促します。 - 入力が正しい場合、文字列を整数に変換し、割り算(整数除算:
//
演算子)を実行、その結果を表示します。 - 各ループの終わりに、
print("-" * 25)
で仕切り線を表示し、ユーザーに次の入力の準備を促します。
まとめ
例外処理を用いずにエラー処理を実装する場合、プログラムは入力値の検証を自前で行う必要があります。
- 入力値が数値であるか、また特定の条件(例:除数が 0 でない)を満たしているかを事前にチェックし、問題があればエラーメッセージを表示して再入力を促す仕組みを導入します。
- この方法は小規模なプログラムでは有効ですが、エラー処理のコードが本来の処理の流れと混在するため、全体が煩雑になりやすいというデメリットもあります。
- 堅牢なプログラムを構築するためには、例外処理(try~except 文)を適切に活用する方法も合わせて学ぶ必要があります。