カスタム例外を発生させる
組み込みの Python 例外ではないエラー条件を通知する必要がある場合があります。これは、独自の例外を作成およびトリガーできる raise ステートメントを使用して行うことができます。これにより、アプリケーションのエラー処理をより具体的かつ説明的にすることができます。
まず、組み込み例外を raise する方法を見てみましょう。WebIDE でファイル ~/project/raise_exception.py を開き、以下のコードを追加します。
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
ファイルを保存し、ターミナルから実行します。
python ~/project/raise_exception.py
出力は次のようになります。
Caught an exception: Input must be a positive number
The number 10 is positive.
ここでは、check_positive 関数が入力が正でない場合に ValueError を発生させ、それが except ブロックによって捕捉されています。
次に、カスタム例外を定義して発生させてみましょう。カスタム例外は、組み込みの Exception クラスを継承するクラスです。
WebIDE でファイル ~/project/custom_exception.py を開き、以下のコードを追加します。
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
ファイルを保存し、ターミナルから実行します。
python ~/project/custom_exception.py
出力は次のようになります。
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
この例では、独自の NegativeNumberError を定義し、特定の条件下でそれを発生させました。その後、try...except ブロックがこのカスタムエラー型を具体的に捕捉し、エラー処理をより正確にしています。