Python - プログラムを終了する

プログラムを終了するには、sys.exit() メソッドを使用します。

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
Windowsコマンドプロンプトで終了ステータスを確認
Windowsコマンドプロンプトで終了ステータスを確認

エラーメッセージを出力して終了する

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
Windowsコマンドプロンプトで終了ステータスを確認
Windowsコマンドプロンプトで終了ステータスを確認

型ヒント(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
python sample-exit.py
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
python -S sample-exit.py
python -S sample-exit.py

os._exit()

os._exit() メソッドを使用してもプログラムが終了します。ただし、クリーンアップハンドラーの呼び出しや、標準入出力バッファのフラッシュが行われません。 また、アンダーバー _ で始まるメソッドは、慣例上、プライベートメソッドとされています。したがって、その使用は推奨されません。

クリーンアップハンドラーについては、次の記事を参照してください。

参考資料

検証環境