Select Language

AI Technology Community

6.5、Python raise文:自発的に例外をスローする

通常の場合、私たちのコードは能動的に例外を投げ出すことはなく、代わりにエラーコードを返すことで呼び出し元に不適切なエラーが発生したことを知らせます。実は、私たちはコードの中で例外を投げ出すこともでき、例外を通じて関連するエラー情報を送信することができます。

raise文を使用して例外を投げ出すことができます。この文の後にはオブジェクトを付ける必要があり、そのオブジェクトはbaseExceptionから派生したものでなければなりません。基本的な構文は以下の通りです:

raise baseExceptionから派生したオブジェクト

以下はコードが能動的に例外を投げ出す例です。このコードはパラメータbが0であることを検出すると例外を投げ出します。

>>> def finally_demo(a, b):
...     if b == 0:
...             raise Exception('my personal exception')    # 例外を投げ出す
...
>>> try:                      # 例外を捕捉する
...     finally_demo(12, 0)
... except Exception, e:      # 任意の例外を捕捉する
...     print("Exception Message: %s" % e.message)   # 例外情報を表示する
...                           # 例外捕捉を終了する
Exception Message: my personal exception             # 8行目の出力

前述のように、投げ出すオブジェクトはbaseExceptionから継承されたものでなければなりません。そうでない場合、raise自体が例外を投げ出します。以下の例ではこの状況を示しています。

>>> raise 8     # オブジェクト8はbaseExceptionから継承されていないため、TypeError例外を投げ出す
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: exceptions must derive from baseException
>>> raise Exception('my personal exception')   # Exception例外を投げ出す
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: my personal exception

ここで、例外オブジェクトの継承関係を強調しておきます。すべてのシステム定義の例外オブジェクトはExceptionから継承されており、ExceptionはbaseExceptionから継承されています。したがって、カスタムの例外タイプを作成することもでき、Exceptionから継承するだけです。

以下はカスタム例外を使用する例で、クラスの使用が関係しています。クラスの使用については後の章で詳細に説明しますので、ここでは簡単に理解しておけばいいです。完全なコードは以下の通りです:

>>> class UserdefException(Exception):     # カスタムの例外クラス
...     def __init__(self, msg):
...         self.msg = msg
...                                              # 定義終了
>>> try:                                         # 捕捉エリアに入る
...     raise UserdefException("experiment")     # 例外を投げ出す
... except UserdefException as ex_obj:           # この例外を捕捉する
...     print(u"子定義例外,エラー情報: %s" % ex_obj)
...                                  # 捕捉エリア終了
子定義例外,エラー情報: experiment        # 8行目の出力情報


post
  • 7

    item of content
例外処理は現代のプログラミング言語の基本的な特性でもあり、正常な分岐と例外の分岐を切り分けることができます。C言語とは異なり、正常な分岐と例外の分岐が混在することはありません。
Pythonにおいて例外は特別なオブジェクトであり、この例外オブジェクトを通じて例外発生時の情報を例外処理関数に渡すことができます。
この章では、例外の捕捉方法、例外情報の取得方法、特定の例外の無視、例外のスロー方法、カスタム例外オブジェクトの作成、そしてPython 2とPython 3における例外処理の類似点と相違点について説明します。最後に、一般的なシステム定義の例外についても紹介します。