工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python カスタム例外

Python カスタム例外

このチュートリアルでは、例を使用して、要件に応じてカスタム例外を定義する方法を学習します。

Python には、プログラム内で問題が発生した場合にプログラムにエラーを出力させる多数の組み込み例外があります。

ただし、目的に合わせて独自のカスタム例外を作成する必要がある場合もあります。


カスタム例外の作成

Python では、ユーザーは新しいクラスを作成してカスタム例外を定義できます。この例外クラスは、組み込みの Exception から直接または間接的に派生する必要があります。 クラス。組み込み例外のほとんども、このクラスから派生しています。

>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

ここでは、CustomError というユーザー定義の例外を作成しました。 Exception から継承 クラス。この新しい例外は、他の例外と同様に、raise を使用して発生させることができます オプションのエラー メッセージを含むステートメント。

大規模な Python プログラムを開発している場合、プログラムが発生させるすべてのユーザー定義の例外を別のファイルに配置することをお勧めします。多くの標準モジュールがこれを行います。例外を exceptions.py として個別に定義します または errors.py (常にではありませんが、一般的に)

ユーザー定義の例外クラスは、通常のクラスが実行できるすべてのことを実装できますが、通常は単純で簡潔にします。ほとんどの実装では、カスタム基本クラスを宣言し、この基本クラスから他の例外クラスを派生させます。この概念は、次の例でより明確になります。


例:Python でのユーザー定義の例外

この例では、ユーザー定義の例外をプログラムで使用して、エラーを発生およびキャッチする方法を示します。

このプログラムは、保存された数字を正しく推測するまで、ユーザーに数字の入力を求めます。彼らがそれを理解するのを助けるために、彼らの推測が保存された数よりも大きいか小さいかのヒントが提供されます.

# define Python user-defined exceptions
class Error(Exception):
    """Base class for other exceptions"""
    pass


class ValueTooSmallError(Error):
    """Raised when the input value is too small"""
    pass


class ValueTooLargeError(Error):
    """Raised when the input value is too large"""
    pass


# you need to guess this number
number = 10

# user guesses a number until he/she gets it right
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()

print("Congratulations! You guessed it correctly.")

以下は、このプログラムの実行例です。

Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

Error という基本クラスを定義しました .

他の 2 つの例外 (ValueTooSmallErrorValueTooLargeError ) は、このクラスから派生したものです。これは、Python プログラミングでユーザー定義の例外を定義する標準的な方法ですが、この方法だけに限定されるわけではありません。


例外クラスのカスタマイズ

このクラスをさらにカスタマイズして、必要に応じて他の引数を受け入れることができます。

例外クラスのカスタマイズについて学ぶには、オブジェクト指向プログラミングの基本的な知識が必要です。

Python オブジェクト指向プログラミングにアクセスして、Python でのオブジェクト指向プログラミングの学習を開始してください。

一例を見てみましょう:

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

出力

Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

ここでは、Exception のコンストラクターをオーバーライドしています。 独自のカスタム引数 salary を受け入れるクラス と message .次に、親 Exception のコンストラクター クラスは self.message で手動で呼び出されます super() を使用した引数 .

カスタム self.salary 属性は後で使用するように定義されています。

継承された __str__ Exception のメソッド クラスは、SalaryNotInRangeError の場合に対応するメッセージを表示するために使用されます。

__str__ をカスタマイズすることもできます メソッド自体をオーバーライドしてください。

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f'{self.salary} -> {self.message}'


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

出力

Enter salary amount: 2000
Traceback (most recent call last):
  File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range

Python で例外を処理する方法の詳細については、Python の例外処理をご覧ください。


Python

  1. Python データ型
  2. Python 演算子
  3. Python pass ステートメント
  4. Python 関数の引数
  5. Python 辞書
  6. Python エラーと組み込み例外
  7. Python オブジェクト指向プログラミング
  8. Python の継承
  9. Python イテレータ
  10. Python の type() と isinstance() と例
  11. Python-例外処理