class NegativeValueError(Exception):
pass
def check_positive(number):
if number < 0:
raise NegativeValueError("負の値は許可されていません。")
try:
num = int(input("正の整数を入力してください: "))
check_positive(num)
print(f"入力値: {num}")
except NegativeValueError as e:
print(f"エラー: {e}")
このプログラムは、カスタム例外(独自のエラー)を作成し、負の数値が入力された場合に例外を発生させてエラーメッセージを表示するというものです。具体的に、Pythonの例外処理機能を使ってエラーを管理する方法を学ぶ例となっています。
コードの説明
1. カスタム例外クラスの定義
class NegativeValueError(Exception):
pass
- 役割:
- Pythonの組み込み例外クラス
Exceptionを継承して、独自の例外クラスを作成しています。 - この例外を使って、負の値が入力された場合に発生するエラーを特定できます。
- Pythonの組み込み例外クラス
pass:- クラスの中に特別な処理を追加しないため、
passを記述してそのまま空のクラスとして定義しています。
- クラスの中に特別な処理を追加しないため、
2. 値をチェックする関数の定義
def check_positive(number):
if number < 0:
raise NegativeValueError("負の値は許可されていません。")
- 役割:
- 引数
numberに渡された値が負の数かどうかをチェックする関数です。 if number < 0::numberが 0 未満(負の値)であれば、次の行を実行します。
raise NegativeValueError:- 条件が満たされた場合に、
NegativeValueError例外を発生させます。 - 発生させると同時に、エラーメッセージ
"負の値は許可されていません。"を指定しています。
- 条件が満たされた場合に、
- 引数
3. ユーザー入力と例外処理
try:
num = int(input("正の整数を入力してください: "))
check_positive(num)
print(f"入力値: {num}")
except NegativeValueError as e:
print(f"エラー: {e}")
tryブロック:- エラーが発生する可能性のある処理をこの中に記述します。
input():- ユーザーに正の整数の入力を求めます。
- 入力された値は文字列型なので、
int()で整数に変換します。
check_positive(num):- 入力された値が正の数かどうかを
check_positive()関数でチェックします。 - もし負の数であれば、
NegativeValueErrorが発生します。
- 入力された値が正の数かどうかを
except NegativeValueError as e::NegativeValueErrorが発生した場合、このブロックが実行されます。as e:- 発生した例外オブジェクトを
eという変数で受け取り、その詳細な情報を表示します。
- 発生した例外オブジェクトを
- エラー時の出力:
- エラーメッセージ
"負の値は許可されていません。"が表示されます。
- エラーメッセージ
プログラムの動作フロー
- ユーザー入力:
- ユーザーが整数を入力します(例: -5)。
- 値のチェック:
- 入力値が負の場合(例: -5)、
NegativeValueErrorを発生させます。
- 入力値が負の場合(例: -5)、
- 例外処理:
NegativeValueErrorが発生すると、exceptブロックが実行され、エラーメッセージが表示されます。
- 正しい入力の場合:
- 入力値が正の場合(例: 10)、
check_positive()はエラーを発生させず、そのまま値を表示します。
- 入力値が正の場合(例: 10)、
実行例
正の値を入力した場合
入力:
正の整数を入力してください: 10
出力:
入力値: 10
負の値を入力した場合
入力:
正の整数を入力してください: -5
出力:
エラー: 負の値は許可されていません。
ポイント
- カスタム例外の使い方:
- 独自の例外を作ることで、特定のエラー状況をわかりやすく管理できます。
- エラーメッセージの明確化:
- ユーザーにどのようなエラーが起きたのか具体的に説明できます。
- 安全性:
- 不正な値が入力された場合でもプログラムが強制終了せず、適切に処理を続行します。


コメント