Python で例外を再スローする

Aditya Raj 2023年6月21日
  1. Python で例外をスローする
  2. Python でカスタム メッセージを使用して例外をスローする
  3. Python で例外を再スローする
Python で例外を再スローする

Python は、プログラムの例外を処理するために try-except ブロックを提供します。 また、手動で例外をスローする raise ステートメントも提供します。

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

Python で例外をスローする

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

raise exception_name

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

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

  1. 次のプログラムは、input() 関数を使用して、入力として数値を与えるようユーザーに要求します。 input() 関数は、変数番号に割り当てられた文字列として入力を返します。

  2. その後、プログラムは入力が数字だけで構成されているか (またはそうでないか) をチェックします。 これには、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
Aditya Raj avatar Aditya Raj avatar

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

関連記事 - Python Exception