sys.exit() の使い方
import sys
# 終了ステータス = 0(正常終了)で終了
sys.exit()
# 終了ステータス を指定して終了
sys.exit(<終了ステータス>)
# エラーメッセージを指定して終了
sys.exit(<エラーメッセージ>)
終了ステータス
終了ステータスはプログラムの処理結果を知らせる値です。Python の 呼び出し元はこの値を参照し、プログラムが正常に終了したかを判断できます。一般的には 正常終了時に 0、エラー発生時に 1 を返します。
終了ステータスを返すには、sys.exit() の引数に 0 ~ 127 の整数を渡します。引数を省略すると 終了ステータス は 0 です。
サンプルコード
次のサンプルコードは 終了コード 99 で プログラムを終了します。ファイル名 sample-exitcode99.py
import sys
print('終了コード 99 でプログラムを終了します。')
# 終了コード 99 でプログラム終了
sys.exit(99)
print('プログラムが終了するため、これは表示されません。')
終了コードの確認
Windowsコマンドプロンプトでプログラムを実行し、終了ステータスを確認しています。コマンドプロンプトでは 環境変数 %ERRORLEVEL% に終了ステータスが格納されるので、ECHO コマンドを使用して表示しています。
D:\test>python sample-exitcode99.py
終了コード 99 でプログラムを終了します。
D:\test>ECHO %ERRORLEVEL%
99

エラーメッセージを出力して終了する
sys.exit() の引数に文字列を渡すと、標準エラー(stderr) に出力され、終了コード 1 でプログラムが終了します。サンプルコード
次のサンプルコードは 標準エラー(stderr) にメッセージ '異常が発生しました。' が出力され、終了コード 1 でプログラムが終了します。ファイル名 sample-exit-message.py
import sys
# 終了コード 1 でプログラム終了
sys.exit('異常が発生しました。')
print('プログラムが終了するため、これは表示されません。')
エラーメッセージと終了コードの確認
D:\test>python sample-exit-message.py
異常が発生しました。
D:\test>ECHO %ERRORLEVEL%
1

型ヒント(typing)
関数やメソッド内で sys.exit を呼ぶと、戻り値は何も返りません。この場合、戻り値の型は NoReturn を指定します。import sys
from typing import NoReturn
def finish() -> NoReturn:
sys.exit()
exit() と quit()
exit() 関数と quit() 関数でもプログラムを終了できます。 しかし、対話的インタープリタシェル用なので、プログラム中での使用は非推奨です。プログラム実行時に -S オプションを指定すると、exit() 関数と quit() 関数 は使用できません。
-S オプション 指定時の動作
ファイル名 sample-exit.py# プログラム終了
exit()
-S オプション無しで実行すると、正常終了します。
python sample-exit.py

-S オプションを指定して実行すると NameError が発生します。
python -S sample-exit.py
Traceback (most recent call last):
File "D:\test\sample-exit.py", line 2, in <module>
exit()
^^^^
NameError: name 'exit' is not defined

os._exit()
os._exit() メソッドを使用してもプログラムが終了します。ただし、クリーンアップハンドラーの呼び出しや、標準入出力バッファのフラッシュが行われません。 また、アンダーバー _ で始まるメソッドは、慣例上、プライベートメソッドとされています。したがって、その使用は推奨されません。クリーンアップハンドラーについては、次の記事を参照してください。
参考資料
- Python公式ドキュメント - sys.exit([arg])
- Python公式ドキュメント - exit(code=None)
- Python公式ドキュメント - quit(code=None)
- Python公式ドキュメント - os._exit(n)
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3693 Experience: Windows Feature Experience Pack 1000.19053.1000.0