Python で例外を再スローする

Python には、プログラム内の例外を処理するための try-exc ブロックが用意されています。また、例外を手動でスローするための raise ステートメントも提供されます。

この記事では、Python プログラムで例外を再スローする方法について説明します。


Pythonで例外をスローする

このステートメントを使用して、raiseプログラム内で例外をスローできます。raiseステートメントの構文は次のとおりです。

raise exception_name

ここで、raiseステートメントは、Exception_nameという名前の例外を入力として受け取り、Python インタープリターによって処理される例外をスローします。

たとえば、raise ステートメントを使用して、プログラム内でValueError例外を発生させることができます。

  1. input()次のプログラムは、関数を使用して数値を入力するようにユーザーに要求します。input()この関数は、変数番号に割り当てられた文字列として入力を返します。
  2. その後、プログラムは入力に数字のみが含まれているかどうか (または含まれていないのか) をチェックします。isdigit()このために、というメソッドを使用します。

    isdigital() メソッドは、文字列に対して呼び出されると、文字列のすべての文字が 10 進数であるかどうかをチェックします。「はい」の場合は True を返し、そうでない場合は False を返します。

number = input("Please Enter a number:")
if number.isdigit():
    number = int(number)
    square = number * number
    print("The square of {} is {}".format(number, square))
else:
    raise ValueError

出力:

Please Enter a number:Aditya
Traceback (most recent call last):
  File "/home/aditya1117/PycharmProjects/pythonProject/webscraping.py", line 7, in <module>
    raise ValueError
ValueError

上記のプログラムでは、ユーザーが提供した入力に 10 進数のみが含まれている場合、if ブロック内のコードが実行されます。したがって、int() 関数を使用して入力を整数に変換します。

最後に、整数の 2 乗が計算されて出力されます。

ユーザーが 10 進数以外の文字を入力すると、else ステートメント内のコードが実行され、プログラムは ValueError 例外をスローします。

ここで、ValueError 例外は組み込み例外です。


Python でカスタム メッセージを使用して例外をスローする

カスタム メッセージを使用してカスタム例外をスローすることもできます。これを行うには、Exception()コンストラクターを使用して例外オブジェクトを作成します。

Exception()コンストラクターはメッセージ文字列を入力パラメーターとして受け取り、実行後に例外を返します。次の例に示すように、raise ステートメントを使用してカスタム例外をスローできます。

number = input("Please Enter a number:")
if number.isdigit():
    number = int(number)
    square = number * number
    print("The square of {} is {}".format(number, square))
else:
    raise Exception("The input contains characters other than decimal digits.")

出力:

Please Enter a number:Aditya
Traceback (most recent call last):
  File "/home/aditya1117/PycharmProjects/pythonProject/webscraping.py", line 7, in <module>
    raise Exception("The input contains characters other than decimal digits.")
Exception: The input contains characters other than decimal digits.

ここでは、プログラムが「入力に 10 進数以外の文字が含まれています」というメッセージとともにカスタム例外を発生させたことがわかります。


Python で例外を再スローする

Python の例外は、try-Except ブロックを使用して処理されます。Try ブロックで例外がスローされると、Exception ブロックでキャッチされ、適切なアクションが実行されます。

以下の例でこれを確認できます。

number = input("Please Enter a number:")
try:
    if number.isdigit():
        number = int(number)
        square = number * number
        print("The square of {} is {}".format(number, square))
    else:
        raise Exception("The input contains characters other than decimal digits.")
except Exception:
    print("In the except block. exception handled.")

出力:

Please Enter a number:Aditya
In the except block. exception handled.

ここでは、try ブロックで例外がスローされます。次に、Exception ブロックで例外をキャッチし、必要に応じて処理し、適切なメッセージを出力します。

Python プログラムで例外を再スローしたい場合は、以下に示すように、Except ブロックで raise ステートメントを使用できます。

number = input("Please Enter a number:")
try:
    if number.isdigit():
        number = int(number)
        square = number * number
        print("The square of {} is {}".format(number, square))
    else:
        raise Exception("The input contains characters other than decimal digits.")
except Exception:
    print("In the except block. exception handled. Rethrowing exception.")
    raise

出力:

Please Enter a number:Aditya
In the except block. exception handled. Rethrowing exception.
Traceback (most recent call last):
  File "/home/aditya1117/PycharmProjects/pythonProject/webscraping.py", line 8, in <module>
    raise Exception("The input contains characters other than decimal digits.")
Exception: The input contains characters other than decimal digits.

この例では、最初に例外ブロックで例外をキャッチして処理します。次に、Python のステートメントを使用してraise例外を再スローします。

おすすめ

転載: blog.csdn.net/fengqianlang/article/details/131505728