例外を発生させる方法
キーワード 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('金額にマイナス値は指定できません。')
その他の組み込み例外
次の公式ドキュメントを参照してください。参考資料
- Python公式ドキュメント - 例外を送出する -- エラーと例外
- Python公式ドキュメント - exception BaseException -- 組み込み例外
- Python公式ドキュメント - exception Exception -- 組み込み例外
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3693 Experience: Windows Feature Experience Pack 1000.19053.1000.0