Python の複数の例外

Manav Narula 2023年1月30日
  1. 複数の例外をキャッチするためのコンマと括弧の使用
  2. 複数の例外をキャッチするには、suppress() 関数を使用する
Python の複数の例外

プログラミングでは、例外はプログラムの通常の流れを妨げる出来事です。Python では、エラーとして表されます。例外は、IndexError、KeyError などの原因に応じて、さまざまなタイプになる可能性があります。

try および except ブロックを使用して、例外を処理できます。try ブロックには、例外を発生させる可能性のあるコードが含まれています。例外が発生した場合は、except ブロックで代替コードを指定できます。

例えば、

try:
    print(5 / 0)
except:
    print(5 / 1)

出力:

5

5/0 は例外を発生させるため、except ブロックのコードを実行します。

raise キーワードを使用して手動で例外を発生させることも可能であることに注意してください。

Python では複数の例外を処理することもできます。Python にはさまざまな種類の例外があることがわかっているため、さまざまな例外に対して複数の except ステートメントを含めることができます。

例えば、

try:
    raise ValueError()
except ValueError:
    print("Value Error")
except KeyError:
    print("Key Error")

出力:

Value Error

1つの except ステートメントで複数の例外をキャッチすることもできます。これらの方法については、以下で説明します。

複数の例外をキャッチするためのコンマと括弧の使用

これを実現する最初の方法は、例外をコンマで区切り、括弧で囲むことです。次のコードはその方法を示しています。

try:
    raise ValueError()
except (ValueError, KeyError):
    print("Error")

出力:

Error

括弧内の例外が発生した場合、このブロックのコードが実行されます。例外オブジェクト(エラーオブジェクトとも呼ばれます)に名前を付けることもできます。e は、エラーオブジェクトに最も一般的に使用される名前です。例えば、

try:
    raise ValueError()
except (ValueError, KeyError) as e:
    print("Error")

出力:

Error

as キーワードは、オブジェクトの名前のエイリアスを作成します。Python 2.5 より前では、以下に示すように、エラーオブジェクトの名前をコンマで区切るだけで、as キーワードの使用を排除することができました。

try:
    raise ValueError()
except (ValueError, KeyError), e:
    print("Error")

出力:

Error

複数の例外をキャッチするには、suppress() 関数を使用する

contextlib ライブラリは、suppress() と呼ばれる非常に便利な関数を提供します。この関数は、複数の例外の処理にも使用できます。

この関数は、tryexcept、および pass ステートメントを 1 行のコードに結合します。これは、例外処理でも使用される with ステートメントとともに使用され、コードをよりクリーンで読みやすくします。

次のコードは、この関数の使用方法を示しています。

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove("somefile.tmp")

上記のコードは、tryexcept、および pass ステートメントを含む次のプログラムと同等です。

try:
    os.remove("somefile.tmp")
except FileNotFoundError:
    pass

pass ステートメントは、何も実行したくないが空のコードのエラーを回避したい場合に使用されます。

以下に示すように、複数の例外に対して suppress 関数を使用できます。

from contextlib import suppress

with suppress(FileNotFoundError, KeyError):
    os.remove("somefile.tmp")
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python Exception