Python には、プログラム内の例外を処理するための try-exc ブロックが用意されています。また、例外を手動でスローするための raise ステートメントも提供されます。
この記事では、Python プログラムで例外を再スローする方法について説明します。
Pythonで例外をスローする
このステートメントを使用して、raise
プログラム内で例外をスローできます。raise
ステートメントの構文は次のとおりです。
raise exception_name
ここで、raise
ステートメントは、Exception_nameという名前の例外を入力として受け取り、Python インタープリターによって処理される例外をスローします。
たとえば、raise ステートメントを使用して、プログラム内でValueError例外を発生させることができます。
input()
次のプログラムは、関数を使用して数値を入力するようにユーザーに要求します。input()
この関数は、変数番号に割り当てられた文字列として入力を返します。- その後、プログラムは入力に数字のみが含まれているかどうか (または含まれていないのか) をチェックします。
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
例外を再スローします。