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*節は、複数の例外を効率的に処理するための強力なツールです。これにより、エラーハンドリングがより柔軟で効率的になります。

投稿者 admin

コメントを残す

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