Python3 エンジニア認定基礎試験 練習問題 Day56:独自例外クラスの作成

【本日のミッション】

Day55では「try構文のネストと例外伝播」について学びました。

今日は、**自分専用の例外を作る「独自例外クラスの作成」**を学びます。

これにより、エラーの種類をより細かく区別し、わかりやすいコードを書くことができます。


独自例外クラスとは

Pythonにはすでに多くの組み込み例外(ValueError、TypeErrorなど)が用意されていますが、

自分のアプリに合わせて 独自のエラークラス を作ることもできます。

その方法は「Exception クラスを継承して新しいクラスを定義する」ことです。

class MyError(Exception):
    """独自の例外クラス"""
    pass
# 使用例
try:
    raise MyError("カスタムエラーが発生しました!")
except MyError as e:
    print("独自例外をキャッチ:", e)

出力結果

独自例外をキャッチ: カスタムエラーが発生しました!
  • Exception を継承して作成する

  • pass だけでも動作する

  • raise MyError("メッセージ") のように発生できる


独自例外に属性を追加する

独自例外クラスには、独自の情報を持たせることもできます。

class InputTooSmallError(Exception):
    def __init__(self, value):
        self.value = value
        self.message = f"入力値が小さすぎます: {value}"
        super().__init__(self.message)

try:
    x = 2
    if x < 5:
        raise InputTooSmallError(x)
except InputTooSmallError as e:
    print(e)

出力結果

入力値が小さすぎます: 2
  • __init__() でメッセージや値を保持できる

  • super().__init__(message) で親クラスにも伝える

  • デバッグ時に役立つ独自情報を持たせられる


独自例外クラスを階層化する

複数の独自例外を階層的に定義することで、処理の粒度を柔軟にできます。

class CustomError(Exception):
    """ベースとなる独自例外"""
    pass
class ValueTooLargeError(CustomError):
    pass
class ValueTooSmallError(CustomError):
    pass
try:
    x = 100
    if x > 50:
        raise ValueTooLargeError("値が大きすぎます!")
except ValueTooSmallError:
    print("値が小さすぎます!")
except ValueTooLargeError as e:
    print("大きい値エラー:", e)
except CustomError:
    print("その他のカスタムエラー")

出力結果

大きい値エラー: 値が大きすぎます!
  • 独自例外を親子構造にできる

  • 共通の親クラスでまとめてキャッチ可能

  • 大規模システムやライブラリ開発で必須のテクニック


組み込み例外と独自例外の組み合わせ

独自例外は組み込み例外と併用できます。

class NegativeValueError(Exception):
    pass
def check_value(x):
    if not isinstance(x, int):
        raise TypeError("整数を入力してください")
    if x < 0:
        raise NegativeValueError("負の値は無効です")
    print("OK:", x)

try:
    check_value(-10)
except NegativeValueError as e:
    print("独自エラー:", e)
except TypeError as e:
    print("型エラー:", e)

出力結果

独自エラー: 負の値は無効です
  • 複数の例外を条件ごとに使い分け可能

  • 独自例外は「アプリ独自の意味を持たせる」目的で使う


練習問題

次のコードを実行したときの出力結果として正しいものを選びなさい。

class MyAppError(Exception):
    pass
class InvalidDataError(MyAppError):
    pass
try:
    raise InvalidDataError("データが不正です")
except MyAppError as e:
    print("キャッチ:", e)

選択肢

A)

何も表示されない

B)

データが不正です

C)

キャッチ: データが不正です

D)

例外が発生して停止する

Python3 エンジニア認定基礎試験 練習問題 Day56:独自例外クラスの作成

解答

C)

キャッチ: データが不正です

■■■スポンサーリンク■■■

解説

  • InvalidDataErrorMyAppError の子クラス

  • except MyAppError で親としてキャッチ可能

👉 正解は

C)

キャッチ: データが不正です

✅ ポイント

  • 独自例外は Exception クラスを継承して作る

  • 属性やメッセージを持たせて詳細な情報を扱える

  • 階層構造を作ると柔軟なエラー処理が可能

  • 組み込み例外と併用して使い分けるのがベストプラクティス


次回予告

Day57では「例外処理のベストプラクティス」を学びます。


参考

Python 3 エンジニア認定基礎試験 – Odyssey CBT
Python3 エンジニア認定基礎試験 出題範囲と学習プラン
Python3 エンジニア認定基礎試験 練習問題 Day1:変数の基本
Python3 エンジニア認定基礎試験 練習問題 Day2:変数の型(int型とstr型)
Python3 エンジニア認定基礎試験 練習問題 Day3:算術演算子と代入演算子
Python3 エンジニア認定基礎試験 練習問題 Day4:文字列の操作
Python3 エンジニア認定基礎試験 練習問題 Day5:比較演算子と論理演算子
Python3 エンジニア認定基礎試験 練習問題 Day6:if文(条件分岐)
Python3 エンジニア認定基礎試験 練習問題 Day7:ループ処理(for文・while文)
Python3 エンジニア認定基礎試験 練習問題 Day8:break文とcontinue文
Python3 エンジニア認定基礎試験 練習問題 Day9:リスト(list)の基本
Python3 エンジニア認定基礎試験 練習問題 Day10:リストの操作(append,remove,len など)
Python3 エンジニア認定基礎試験 練習問題 Day11:リストのスライス(部分取り出し)
Python3 エンジニア認定基礎試験 練習問題 Day12:タプル(tuple)の基本
Python3 エンジニア認定基礎試験 練習問題 Day13:辞書(dict)の基本
Python3 エンジニア認定基礎試験 練習問題 Day14:集合(set)の基本
Python3 エンジニア認定基礎試験 練習問題 Day15:関数の定義と呼び出し
Python3 エンジニア認定基礎試験 練習問題 Day16:関数のデフォルト引数とキーワード引数
Python3 エンジニア認定基礎試験 練習問題 Day17:可変長引数(*args, **kwargs)
Python3 エンジニア認定基礎試験 練習問題 Day18:関数のスコープ(ローカル変数とグローバル変数)
Python3 エンジニア認定基礎試験 練習問題 Day19:ネスト関数(関数の中の関数)
Python3 エンジニア認定基礎試験 練習問題 Day20:ラムダ式(無名関数)
Python3 エンジニア認定基礎試験 練習問題 Day21:組み込み関数(len, type, range など)
Python3 エンジニア認定基礎試験 練習問題 Day22:組み込み関数(sum,max,min,sorted)
Python3 エンジニア認定基礎試験 練習問題 Day23:文字列と組み込み関数(len,str,int,float)
Python3 エンジニア認定基礎試験 練習問題 Day24:組み込み関数(abs, round, pow)
Python3 エンジニア認定基礎試験 練習問題 Day25:組み込み関数(sorted の応用と key 引数)
Python3 エンジニア認定基礎試験 練習問題 Day26:組み込み関数(enumerate, zip)
Python3 エンジニア認定基礎試験 練習問題 Day27:組み込み関数(map, filter, reduce)
Python3 エンジニア認定基礎試験 練習問題 Day28:組み込み関数(any, all)
Python3 エンジニア認定基礎試験 練習問題 Day29:組み込み関数(isinstance,issubclass)
Python3 エンジニア認定基礎試験 練習問題 Day30:組み込み関数(callable, eval)
Python3 エンジニア認定基礎試験 練習問題 Day31:組み込み関数(dir, help)
Python3 エンジニア認定基礎試験 練習問題 Day32:組み込み関数(id, hash)
Python3 エンジニア認定基礎試験 練習問題 Day33:組み込み関数(repr, format)
Python3 エンジニア認定基礎試験 練習問題 Day34:組み込み関数(globals, locals)
Python3 エンジニア認定基礎試験 練習問題 Day35:組み込み関数(vars, callable)
Python3 エンジニア認定基礎試験 練習問題 Day36:組み込み関数(reversed, slice)
Python3 エンジニア認定基礎試験 練習問題 Day37:組み込み関数(getattr, setattr, hasattr, delattr)
Python3 エンジニア認定基礎試験 練習問題 Day38:組み込み関数(eval, exec, compile)
Python3 エンジニア認定基礎試験 練習問題 Day39:組み込み関数(zip の応用・辞書との組み合わせ)
Python3 エンジニア認定基礎試験 練習問題 Day40:モジュールの基本(import と from の違い)
Python3 エンジニア認定基礎試験 練習問題 Day41:as(別名インポート)と import の仕組み
Python3 エンジニア認定基礎試験 練習問題 Day42:標準ライブラリ(math モジュールの基本)
Python3 エンジニア認定基礎試験 練習問題 Day43:標準ライブラリ(random モジュールの活用)
Python3 エンジニア認定基礎試験 練習問題 Day44:標準ライブラリ(datetime モジュールの使い方)
Python3 エンジニア認定基礎試験 練習問題 Day45:標準ライブラリ(os と sys)
Python3 エンジニア認定基礎試験 練習問題 Day46:標準ライブラリ(pathlib とファイルパス操作)
Python3 エンジニア認定基礎試験 練習問題 Day47:パッケージ構造と __init__.py
Python3 エンジニア認定基礎試験 練習問題 Day48:自作モジュールの作成とインポート
Python3 エンジニア認定基礎試験 練習問題 Day49:例外処理の基本(try, except)
Python3 エンジニア認定基礎試験 練習問題 Day50:複数例外の処理と except as
Python3 エンジニア認定基礎試験 練習問題 Day51:else, finally の使い方
Python3 エンジニア認定基礎試験 練習問題 Day52:raise による例外発生

■■■スポンサーリンク■■■