Python 3.11では、新たな例外クラス「ExceptionGroup」とこれを取り扱うためのexcept*節が追加されました。これはPEP 654で提案されたもので、無関係な例外を複数まとめて処理するための機構です。

ExceptionGroup例外とは、無関係な例外を複数まとめて処理するための機構で、まとめられた複数の例外を個別に処理するために追加されたのがexcept*節となります。

以下に簡単な例を示します。

raise ExceptionGroup(
    'exception group',
    [
        TypeError('TypeError in ExceptionGroup'),
        ValueError('ValueError in ExceptionGroup')
    ]
)

このコードは、TypeError例外とValueError例外をExceptionGroup例外にまとめて送出しています。ExceptionGroup例外のインスタンスを生成する際には、例外についてのメッセージとそこに含める例外を要素とするシーケンス(リストなど)を与えます。

ExceptionGroup例外を処理するには大きく分けて2つのやり方があります。1つはExceptionGroup例外にまとめられている個々の例外をexcept*節で処理する方法です。

基本的には以下のような形になります。

try:
    ...
except* ExceptionGroup as e:
    for ex in e:
        ...

このように、Python 3.11の新機能であるExceptionGroupとexcept*節は、複数の例外を効率的に処理するための強力なツールとなります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です