Python で例外を再スローする
Python は、プログラムの例外を処理するために try-except
ブロックを提供します。 また、手動で例外をスローする raise
ステートメントも提供します。
この記事では、Python プログラムで例外を再スローする方法について説明します。
Python で例外をスローする
raise
ステートメントを使用して、プログラムで例外をスローできます。 raise
ステートメントの構文は次のとおりです。
raise exception_name
ここで、raise
ステートメントは exception_name
という名前の例外を入力として受け取り、Python インタープリターが処理する例外をスローします。
たとえば、raise
ステートメントを使用して、プログラムで ValueError
例外を発生させることができます。
-
次のプログラムは、
input()
関数を使用して、入力として数値を与えるようユーザーに要求します。input()
関数は、変数番号に割り当てられた文字列として入力を返します。 -
その後、プログラムは入力が数字だけで構成されているか (またはそうでないか) をチェックします。 これには、
isdigit()
メソッドを使用します。isdigit()
メソッドは、文字列に対して呼び出されると、文字列のすべての文字が 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
ブロックで例外がスローされると、except
ブロックでキャッチされ、適切なアクションが実行されます。
これは、以下の例で確認できます。
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
ブロックで例外が発生します。 次に、except
ブロックで例外をキャッチし、必要に応じて処理し、適切なメッセージを出力します。
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.
この例では、最初に except
ブロックで例外をキャッチして処理しました。 その後、raise
ステートメントを使用して、Python で例外を再スローしました。
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub