今回はPythonで使われる3種類のexit関数について、主にsys.exit関数について解説していきます。sys.exit関数を使うと、Pythonのプログラムを好きなタイミングで停止させることが出来ます。
この記事では、
- 3種類のexitの違いについて
- sys.exit関数の使い方
といった基本的な内容から、
- sys.exit関数で終了ステータスを返す方法
を通して、実際のプログラミングでsys.exit関数がどう使われるのかを解説します。
※ この記事のコードはPython 3.7で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
プログラムを終了させる3種類のexit
Pythonには使われる用途がよく似ている3種類のexit関数があります。
その3種類のexit関数について、解説していきます。
exit関数
exit関数はインタラクティブシェルを終了させるための関数です。
ちなみにquit関数もインタラクティブシェルを終了させることのできる関数です。exit関数とquit関数は同じ機能を持っています。Macであればターミナル、Windowsであればコマンドプロンプトで、
python
というコマンドを実行すると、インタラクティブシェルを起動できます。
このようにexit関数を実行すると、
exit()
インタラクティブシェルが終了されます。
下のスクリーンショットは実際にMacのターミナルでインタラクティブシェルを起動したところです。
sys.exit関数
sys.exit関数は、実行しているプログラムの中でメインプロセスを終了させるための関数です。インタラクティブシェルなどで実行する場合、この関数はなくてもプログラムは終了します。
しかしsys.exit関数を使うと終了ステータスを扱うことができるようになり、それこそがsys.exit関数を使うメリットでもあります。
このsys.exit関数については、この記事で詳しく解説していきます!
os._exit()関数
os._exit関数は、fork関数によって作られた新しいプロセスを終了させるための関数です。
sys.exit関数は例外を発生させてプログラムを終了させますが、os._exit関数はプロセスそのものを終了させます。
少し難しいかもしれませんが、ハイレベルなプログラムを扱うまではあまり使われることのない関数です。
sys.exit関数の使い方
sys.exit関数は紹介してきた3つのexit関数の中でも、とても良く使われます。この章ではそのsys.exit関数をもう少し詳しく解説します。
こちらのサンプルコードを見てみましょう。
import sys for i in range(10): if i == 5: print("Done") sys.exit() print(i)
sys.exit関数を使うために、「import sys」を実行して、sysモジュールをimportしましょう。
このコードではrange(10)の中でiが5になると、Doneというメッセージとともにsys.exit関数を実行させます。このサンプルコードに出てくるrange関数の詳しい使い方は、こちらの記事をご覧ください。
実行結果
0 1 2 3 4 Done
気づいた方もいるかもしれませんが、sys.exit関数はなくてもこのプログラムは終了します。しかしiが5になった段階で終了させるためには、sys.exit関数が必要になります。
さらにsys.exit関数を使うことによって、例外が発生します。これによって挙動が変わることはありませんが、os._exit関数との違いでもあります。
sys.exit関数で終了ステータスを返す方法
終了ステータスとは、プログラムが正常に動いたかどうかを知らせるステータスです。
一般的には正常に終了した際には0を、エラーなどの異常が起きた場合は1を返します。そして紹介してきたsys.exit関数には、終了ステータスを返させることができます。
import sys array1 = [2,3,5,7,11,13] for i in array1: if i == 5: sys.exit("Error") if i == 13: print("Done") sys.exit(0) print(i)
このプログラムでは、iが13になればプログラムが正常終了、iが5になれば異常な終了とします。
iが5になるとErrorというメッセージとともに、終了ステータス1を返します。
iが8になると、Doneというメッセージとともに、終了ステータス0を返します。
このようにif文で分岐を作り、分岐をした先に終了ステータスが付いたsys.exit関数を置くのが一般的な使い方です。CLIで動くPythonアプリケーションの場合は、コマンドの「echo $?」で終了ステータスが確認ができます。
これは直前のプログラムの終了ステータスが「$?」という特殊変数に自動的に代入されるからです。
この終了ステータスを使うことで、大規模なプログラムを作る際にも終了ステータスを確認しながらのデバッグがしやすくなります。
test@testmachine: ~/workspace$ python exit1.py 2 3 Error test@testmachine: ~/workspace$ echo $? 1
まとめ
Pythonのexit関数は3つの種類があり、目的も何かを終了させるということでは同じです。
しかし終了させる対象と目的が違うことがわかっていただけたかと思います。またsys.exit関数にはプログラムを終了させるだけではなく、終了ステータスをつけることもできます。
終了ステータスを効果的に利用することで、より開発のスピードが速くなりますよ!