Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでユーザー定義例外を実装する方法をわかりやすく解説

Pythonにおけるユーザー定義例外の基本

Pythonでは、新しい例外クラスを作成することで、ユーザー定義(カスタム)例外を実装できます。基本的な考え方は、組み込みのExceptionクラスを親クラスとして継承した独自の例外クラスを定義するというものです。実は、Pythonのほとんどの組み込み例外も、同じ仕組みによって実装されています。

以下のコードでは、「CustomException」というユーザー定義例外クラスを作成しています。このクラスはExceptionクラスを親としているため、他の例外クラスとまったく同じように、raise文を使って(必要に応じてエラーメッセージを添えて)例外を発生させることができます。

サンプルコード:アルファベット当てゲームで学ぶカスタム例外

ここでは、ユーザー定義例外を発生させ、プログラム内でエラーを捕捉(キャッチ)する方法を例示します。サンプルコードでは、ユーザーが正解のアルファベットを入力するまで、何度でも入力を求める仕組みになっています。

さらに、ユーザーが正解を推測できるよう、ヒントとなるメッセージを表示する機能も備えています。

# Python ユーザー定義例外の例
class CustomException(Exception):
    """他の例外クラスの基底クラス"""
    pass

class PrecedingLetterError(CustomException):
    """入力されたアルファベットが正解より前(小さい)場合に発生"""
    pass

class SucceedingLetterError(CustomException):
    """入力されたアルファベットが正解より後(大きい)場合に発生"""
    pass

# 正解のアルファベットが当たるまで繰り返し入力を求める
alphabet = 'k'

while True:
    try:
        foo = input("アルファベットを1文字入力してください: ")
        if foo < alphabet:
            raise PrecedingLetterError
        elif foo > alphabet:
            raise SucceedingLetterError
        break
    except PrecedingLetterError:
        print("入力されたアルファベットは正解より前の文字です。もう一度試してください!")
        print('')
    except SucceedingLetterError:
        print("入力されたアルファベットは正解より後の文字です。もう一度試してください!")
        print('')

print("おめでとうございます!正解です。")

コードのポイント

  • 基底クラスの作成: CustomExceptionExceptionを継承しており、すべてのカスタム例外の土台となります。
  • 例外の階層化: PrecedingLetterErrorSucceedingLetterErrorCustomExceptionを継承しているため、状況に応じて個別にも、まとめて捕捉することも可能です。
  • raise文による例外発生: 入力値の大小を比較し、条件に応じて適切な例外を発生させています。
  • try-exceptによる処理: 発生した例外をexceptブロックで捕捉し、ヒントメッセージを表示して再入力を促します。

注意点:Python 2とPython 3の違い

元のコードで使われていたraw_input()はPython 2専用の関数です。Python 3では廃止されているため、上記のサンプルではPython 3対応のinput()に置き換えています。現在Pythonで開発を行う場合は、必ずinput()を使用しましょう。

このように、Exceptionクラスを継承したカスタム例外を定義すれば、アプリケーション固有のエラー状態を明確に表現でき、コードの可読性と保守性が大きく向上します。

  1. Pythonで例外を発生させる方法!raise文の基本と実例をわかりやすく解説

    Pythonで例外を発生させるには? Pythonでは、raiseキーワードを使うことで、意図的に例外(Exception)を発生させることができます。バリデーションエラーの通知や、異常な状態の検出など、プログラムの制御フローを明確にしたい場面で非常に役立ちます。 raise文の基本構文 raise文の基本的な書式は以下のとおりです。 raise [Exception [, args [, traceback]]] 各要素の意味は次のとおりです。 Exception:発生させる例外の名前(例:ValueError、TypeError など) args(省略可能):例外に渡す引数の値。エラー

  2. Pythonでユーザー定義例外を実装する方法をわかりやすく解説

    Pythonにおけるユーザー定義例外の基本 Pythonでは、新しい例外クラスを作成することで、ユーザー定義(カスタム)例外を実装できます。基本的な考え方は、組み込みのExceptionクラスを親クラスとして継承した独自の例外クラスを定義するというものです。実は、Pythonのほとんどの組み込み例外も、同じ仕組みによって実装されています。 以下のコードでは、「CustomException」というユーザー定義例外クラスを作成しています。このクラスはExceptionクラスを親としているため、他の例外クラスとまったく同じように、raise文を使って(必要に応じてエラーメッセージを添えて)例外を発