【python】プログラムを終了させる方法【exit関数】

Python

この記事では、Pythonのプログラムを終了させる方法を解説します。

Pythonでプログラムを終了させるには、exit関数を使います。
exit関数は以下の3つがあります。

  • exit関数
  • sys.exit関数
  • os._exit関数

それでは、それぞれのexit関数の使い方を見ていきましょう!

exit関数

exit関数は、対話型シェルを終了させるための関数です。ターミナルやコマンドプロンプトで起動中の対話型シェルを終了させたい場合に使います。

$ python3
Python 3.7.7 (default, Mar 10 2020, 15:43:27) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$

sys.exit関数

sysモジュールのexit関数は、ソースコード内からプログラムを強制終了させるための関数です。sysモジュールをインポートして使います。

import sys

sys.exit([arg])

オプション引数argには、整数や他の型のオブジェクトを指定できます。

引数

引数を指定することで、終了ステータスやエラーメッセージを出力することができます。

整数

引数に整数を渡すことで終了ステータスを指定することができます。デフォルトの値は「0」となっています。例えば、0は正常終了で、他の値は異常終了として扱ったりします。

# 正常終了
sys.exit(0)

# 異常終了
sys.exit(1)

文字列

引数に文字列を渡すことでエラーメッセージとして強制終了時に出力してくれます。

終了ステータスは「1」を返します。

sys.exit('エラーメッセージ')

終了ステータスを確認する

終了ステータスは、ターミナルやコマンドプロンプト内で確認することができます。

確認方法

以下のコマンドをコード実行後に使用します。

echo $?

サンプル

試しにターミナルでコード実行後に「echo $?」を呼び出してみます。

exit.py

import sys

print('exit 実行')

sys.exit(1)

print('exit 終了')

ターミナル

$ python3 exit.py
exit 実行
$ echo $?
1

「1」が表示されて終了ステータスを確認することができました!

注意

sys.exit関数は、SystemExit例外を送出してPythonを終了させています。なので、例外処理内でsys.exit関数を処理してもプログラムを終了させることができません。

import sys

try:
    sys.exit()
except:
    pass

# 実行される
print('Hello!')

実行結果

Hello!

sys.exit関数を使ってみる

それでは、サンプルコードでsys.exit関数の挙動を見ていきます。下記のコードは、input関数で値を入力してもらい、その値によって処理を分岐させるコードです。

import sys

value = input('value: ')

if value == 'exit':
    print('exit(0)')
    sys.exit(0)

elif value == 'error':
    print('exit(1)')
    sys.exit(1)

elif value == 'error_message':
    print('exit(エラーメッセージ)')
    sys.exit('エラー発生')

else:
    print(f'{value}が入力されました!')

# 問題がなければここまで到達する
print('プログラム終了')

それぞれの実行パターン毎に結果を見ていきます。

通常パターン

sys.exit関数が処理されていない通常のパターンです。「プログラム終了」まで処理されているのがわかります。

$ python3 exit.py
value: hello
helloが入力されました!
プログラム終了
$ echo $?
0

正常終了パターン

sys.exit関数が処理されPythonが終了したことにより「プログラム終了」が出力されていません。

$ python3 exit.py
value: exit
exit(0)
$ echo $?
0

異常終了パターン

こちらのパターンでもsys.exit関数が処理されてPythonが終了したことにより「プログラム終了」が出力されていません。

$ python3 exit.py
value: error
exit(1)
$ echo $?
1

文字列パターン

sys.exit関数の引数に指定した文字列がPython終了時に出力されているのがわかります。

$ python3 exit.py
value: error_message
exit(エラーメッセージ)
エラー発生
$ echo $?
1

os._exit関数

os._exit関数を使うことで、スレッドの保持している資源を解放したり、バッファをフラッシュしたりせずに強制終了します。

例えば、os.fork関数で作成した子プロセス内で使用します。

タイトルとURLをコピーしました