Python

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

この記事では、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()
$ 

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

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!
【Python】tryを使ったエラー処理(例外処理)の仕方を解説この記事では、Pythonでエラーが発生した場合の処理を定義する方法を解説します。発生したエラーに応じて実行される処理のことを「エラー処理」や「例外処理」と呼びます。エラーが発生したけどプログラムを中断したくない場合、あらかじめエラー処理を定義しておくことでエラーの内容に応じた処理を実行させることができます。...

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()関数 はプログラムを終了させたり、デバッグなどにも使うことができました。

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

『DMM WEBCAMP COMMIT』