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*節は、複数の例外を効率的に処理するための強力なツールとなります。