Pythonで不正な引数や無効な値を処理する際、適切な例外を発生させることが重要です。一般的には、次のような基準で例外を選びます。

ValueErrorTypeErrorの使い分け

  • ValueError: 引数の型は正しいが、値が無効な場合に使用します。例えば、数値を期待している関数に対して無効な範囲の数値が与えられたときです。

  • TypeError: 引数の型が間違っている場合に使います。例えば、整数を期待している引数に文字列が渡された場合です。

def calculate_area(radius):
    if not isinstance(radius, (int, float)):
        raise TypeError("radius must be a number")
    if radius < 0:
        raise ValueError("radius cannot be negative")

カスタム例外の作成

特定のエラーを区別する必要がある場合、ValueErrorTypeErrorを継承して独自の例外を定義することが可能です。これにより、特定の例外をキャッチしてカスタム処理が行えるようになります。

class InvalidArgumentError(ValueError):
    pass

このように、引数の検証に適切な例外を使うことで、エラーハンドリングが明確になり、バグの特定が容易になります。