独自例外の作成

Pythonにおける「独自例外の作成」とは、標準で用意されている例外クラス(ValueErrorTypeError など)では対応しきれない特定のエラー状況に対して、ユーザーが独自の例外クラスを定義して利用することを意味します。以下に、その目的と方法、注意点を詳しく説明します。


独自例外を作成する目的

Pythonには多くの標準例外がありますが、すべてのアプリケーション固有のエラーをカバーできるわけではありません。たとえば、オンラインショップの注文処理において「在庫切れエラー」「無効な会員ID」などの独自の状況を示すためには、専用の例外を作成するほうがコードの可読性・保守性が高くなります。


独自例外クラスの基本構文

Pythonの例外はすべて BaseException を祖先とし、一般には Exception クラスを継承して定義します。

python
class MyCustomError(Exception): """独自例外クラスの例""" pass

このように Exception を継承するだけで、新しい例外クラスを作成できます。


独自例外にメッセージや属性を追加する

より具体的な情報を例外に含めるために、__init__ メソッドを定義してカスタマイズすることもできます。

python
class InsufficientBalanceError(Exception): def __init__(self, balance, amount): self.balance = balance self.amount = amount message = f"残高不足です(残高: {balance}, 要求額: {amount})" super().__init__(message)

このようにして、例外発生時にエラーメッセージに具体的な数値を含めることができます。


独自例外の使用例

python
def withdraw(balance, amount): if amount > balance: raise InsufficientBalanceError(balance, amount) return balance - amount try: new_balance = withdraw(1000, 1500) except InsufficientBalanceError as e: print(f"エラーが発生しました: {e}")

このコードでは、InsufficientBalanceError が適切な条件で発生し、try-except ブロックで捕捉されます。


独自例外の設計における注意点

  • 命名規則:クラス名は通常 ○○Error○○Exception で終わらせるとよいです。

  • 継承構造:同じカテゴリの複数の例外がある場合、基底クラスを自分で用意して階層構造を作ると便利です。

python
class ApplicationError(Exception): pass class InvalidUserError(ApplicationError): pass class DataNotFoundError(ApplicationError): pass

このように設計すれば、すべてのアプリケーション例外を ApplicationError でまとめて処理することも可能です。


まとめ

項目 内容
独自例外の定義方法 Exception クラスを継承して新しいクラスを定義
目的 アプリ固有のエラー状況を明確に区別し扱うため
カスタマイズ方法 __init__ メソッドで属性やエラーメッセージを設定
利用時のベストプラクティス 明確な命名と階層構造で例外を整理すること

生成日:2025/05/03