Python 3.11では、新たな例外クラス「ExceptionGroup」とこれを取り扱うためのexcept*節が追加されました。これはPEP 654で提案されたもので、無関係な例外を複数まとめて処理するための機構です。
ExceptionGroupとは
ExceptionGroupは、無関係な例外を複数まとめて処理するための機構です。そして、まとめられた複数の例外を個別に処理するために追加されたのがexcept*節となります。
以下に簡単な例を示します。
raise ExceptionGroup(
'exception group',
[
TypeError('TypeError in ExceptionGroup'),
ValueError('ValueError in ExceptionGroup')
]
)
このコードは、TypeError例外とValueError例外をExceptionGroup例外にまとめて送出しています。ExceptionGroup例外のインスタンスを生成する際には、例外についてのメッセージとそこに含める例外を要素とするシーケンス(リストなど)を与えます。
ExceptionGroupの処理
ExceptionGroup例外を処理するには大きく分けて2つのやり方があります。1つはExceptionGroup例外にまとめられている個々の例外をexcept*節で処理する方法です。基本的には以下のような形になります。
try:
...
except* ExceptionGroup as e:
for ex in e:
...
このように、Python 3.11の新機能であるExceptionGroupとexcept*節は、より効率的なエラーハンドリングを可能にします。これにより、複数の例外を一度に処理し、コードの可読性を向上させることができます。