Select Language

AI Technology Community

6.3、Python try else文の使い方

これまで紹介してきたのはすべて except 分岐、つまり例外分岐です。except 分岐は例外が発生したときに実行されます。今回紹介する分岐は例外が投げられなかったときにのみ実行される、これが else 分岐です。

以下にこの使い方をデモンストレーションします。

>>> def except_demo(a, b):            # 例外処理を含む関数を定義する
...     try:
...             a = a / b
...     except ZeroDivisionError, except_obj:   # 0で割る例外を捕捉する
...             print("Exception Message = %s" % except_obj.message)
...     else:                         # 例外がないときにトリガーされるelse分岐
...             print("No Exception is Got")
...
>>> except_demo(12, 0)                # 0で割った
        # 5行目の出力
Exception Message = integer division or modulo by zero 
>>> except_demo(12, 2)
No Exception is Got                   # 7行目の出力、例外が発生しなかったときに実行される


注意すべきは、例外が捕捉されず、正常分岐で直接 return を使って返す場合、else 分岐は実行されないことです。以下の例のように:

>>> def div(a, b):
...     try:
...         c = a / b
...         return c        # これが重要で、else分岐が決して実行されない原因となる
...     except ZeroDivisionError as ex_obj:
...         print(u"例外を捕捉しました: %s" % ex_obj)
...     else:               # この分岐は、例外が投げられたかどうかに関係なく実行されない
...         print(u"例外を捕捉しませんでした")
...
>>> div(8, 2)               # 例外が投げられず、else分岐も実行されない
4.0
>>> div(8, 0)               # 例外が投げられ、else分岐は実行されない
例外を捕捉しました: division by zero


post
  • 7

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