Python - 例外を発生させる

例外を送出するには、キーワード raise を使用します。また、独自の例外を定義するには Exception クラスを継承した新しいクラスを作成します。

例外を発生させる方法

キーワード raise の後に、BaseExceptionを継承したクラス のインスタンスを指定します。

<BaseExceptionを継承したクラスのインスタンス>の部分には、発生させたい例外クラスのインスタンスを指定します。例えば、Exception() や ValueError() などが該当します。また、独自に定義した例外クラスのインスタンスも指定できます。

raise <BaseExceptionを継承したクラスのインスタンス>

サンプルコード

次のサンプルコードは 例外 Exception を発生させ、 try - except で 補足(キャッチ) しています。
try:
    raise Exception('例外を投げる')
except Exception as err:
    print(err)

ユーザ定義例外 の作成方法

Exception クラスを継承し、クラスを作成します。 特に拡張する必要が無い場合でも、空のブロックは許されていません。 そのため、キーワード pass を使用しています。
class MyException(Exception):
    pass

独自のエラーメッセージを返す方法

コンストラクタ __init__ を オーバーライドし、基底クラスのコンストラクタに、編集したメッセージを渡します。
# 独自例外クラス
class MyException(Exception):
    # コンストラクタ
    def __init__(self, itemName) -> None:
        # 基底クラスのコンストラクタを呼び出す
        super().__init__(itemName + 'が無効です。')

try:
    # 独自例外を発生させる
    raise MyException('ユーザー名')
except MyException as err:
    print(err)  # 'ユーザー名が無効です。'

メンバー変数を追加し、文字列変換メソッドを拡張する

コンストラクタ__init__をオーバーライドし、メンバー変数に引数で渡された値を設定します。また、文字列変換メソッド __str__ をオーバーライドし、メンバー変数の値を使用してメッセージを返します。
# 独自例外クラス
class MyException(Exception):
    # コンストラクタ
    def __init__(self, itemName) -> None:
        # メンバー変数に、引数で渡された値を設定
        self.itemName = itemName

    # 文字列変換メソッド
    def __str__(self):
        return self.itemName + 'が無効です。'

try:
    # 独自例外を発生させる
    raise MyException('ユーザー名')
except MyException as err:
    # __str__ が呼ばれる
    print(err)  # 'ユーザー名が無効です。'

組み込み例外

よく使う組み込み例外

Exception

単純な例外を発生させたいだけであれば、Exception を使用します。コンストラクタには エラーメッセージ を渡します。
raise Exception('エラーが発生しました。')

TypeError

不正な型が渡されたときに使用します。例えば int型 が期待される箇所で str型 が渡された場合に使用します。この例外を発生させる際には、コンストラクタにエラーメッセージを渡します。
raise TypeError('金額は整数型でなければなりません。')

ValueError

不正な値が渡されたときに使用します。例えば関数が特定の範囲の値しか受け付けない場合に、その範囲外の値が渡されたときに使用します。 この例外を発生させる際には、コンストラクタにエラーメッセージを渡します。
raise ValueError('金額にマイナス値は指定できません。')

その他の組み込み例外

次の公式ドキュメントを参照してください。

参考資料

検証環境