Python スクリプトを途中で終了させる (exit)

2021-01-16

#Python3 sys 例外処理

エラー発生等で、Python のスクリプトを任意の場所で終了させたくなった時、PHP 等に有る組み込みの exit() が Python には無いことに少し驚くかもしれません。

正確に言えば、exit() は使える事が多いものの、それは Python の対話的インタープリタシェル用のものなので、スクリプト中では使うべきではないと公式ドキュメントに書かれています。

一般的な終了方法

Python では通常、次のようにして中途終了します。

しかしこの方法だと、exit の為だけに sys モジュールをインポートしなければなりません。
また、exit 以外で sys を使うことはあまり無いので、これは無駄な手間のように思えます。

例外を送出して終了

公式ドキュメントの sys.exit() には次のように書かれています。

Python を終了します。 exit() は SystemExit を送出するので、 try ステートメントの finally 節に終了処理を記述したり、上位レベルで例外を捕捉して exit 処理を中断したりすることができます。

究極には、 exit() は例外を送出する “だけ” なので、これがメインスレッドから呼び出されたときは、プロセスを終了するだけで、例外は遮断されません。

つまり、sys.exit() が行っているのは例外 SystemExit の送出だけです。
従って、次の方法は sys.exit() とほぼ等価です。

raise 文ならば sys をインポートする必要がない為、こちらのほうが便利ではないかと思います。
また、関数中で早期 return を行うことで簡潔に終了できる場合は、そのほうが良いでしょう。

※ Python 3.9 で動作確認。

QooQ