Python PR

【Python】プログラムを終了させるexit関数の使い方

記事内に商品プロモーションを含む場合があります

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

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()
$ 

ちなみに、以下のショートカットでも終了させることができます。

Mac = control + D
Window = ctrl + D

sys.exit関数

sysモジュールのexit()関数は、ソースコード内からプログラムを強制終了させるための関数です。オプション引数であるargには、整数や他の型のオブジェクトを指定できます。

以下のようにsysモジュールをインポートして使います。

import sys

sys.exit([arg])
sysモジュールは、標準ライブラリです

オプション引数arg

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

整数

引数に整数を渡すことで終了ステータスを指定することができます。

# 正常終了
sys.exit(0)

# 異常終了
sys.exit(1)
0 = 正常終了、他の値 = 異常終了 として扱ったりする

文字列

引数に文字列を渡すことでエラーメッセージとして強制終了時に出力してくれます。終了ステータスは「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プログラムを終了させています。なので、tryブロック内で処理してもプログラムを終了させることができません。

import sys

try:
    sys.exit()
except:
    pass

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

実行結果

Hello!

tryを使ったエラー処理(例外処理)の仕方を解説

sys.exit関数を使ってみる

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

exit.py

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が終了したことにより「プログラム終了」が出力されていません。終了ステータスは「1」が返されました。

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

文字列パターン

sys.exit関数の引数に指定した文字列が、Python終了時に出力されているのがわかります。終了ステータスは「1」です。

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

os._exit関数

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

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

Linkos.fork()

まとめ

この記事では、Pythonのexit()関数について解説しました!

exit()関数は、プログラムを終了させたり、デバッグなどにも使うことができました。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ