Python 3.11では、新たな例外クラス「ExceptionGroup」とこれを取り扱うためのexcept*節が追加されました。これはPEP 654で提案されたもので、無関係な例外を複数まとめて処理するための機構です。
ExceptionGroupとは
ExceptionGroupは、無関係な例外を複数まとめて処理するための機構です。例えば、以下のコードでは、TypeError例外とValueError例外をExceptionGroup例外にまとめて送出しています。
raise ExceptionGroup (
'exception group',
[
TypeError ( 'TypeError in ExceptionGroup' ),
ValueError ( 'ValueError in ExceptionGroup')
]
)
このように、ExceptionGroup例外のインスタンスを生成する際には、例外についてのメッセージとそこに含める例外を要素とするシーケンス(リストなど)を与えます。
except*節とは
ExceptionGroup例外を処理するには大きく分けて2つのやり方があります。1つはExceptionGroup例外にまとめられている個々の例外をexcept*節で処理する方法です。基本的には以下のような形になります。
try:
...
except* ExceptionGroup:
...
「try」ブロック内で実行したコードが何らかの例外を投げたとき、その例外は「except*」ブロックで捕捉され、指定した処理が実行されます。
まとめ
Python 3.11の新機構、ExceptionGroupとexcept*節は、複数の例外を効率的に処理するための強力なツールです。これにより、エラーハンドリングがより柔軟で効率的になります。