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
出力:
エラー: 負の値は許可されていません。
ポイント
- カスタム例外の使い方:
- 独自の例外を作ることで、特定のエラー状況をわかりやすく管理できます。
- エラーメッセージの明確化:
- ユーザーにどのようなエラーが起きたのか具体的に説明できます。
- 安全性:
- 不正な値が入力された場合でもプログラムが強制終了せず、適切に処理を続行します。
コメント