【Python入門】3つのexitを使い分けよう!

今回はPythonで使われる3種類のexit関数について、主にsys.exit関数について解説していきます。sys.exit関数を使うと、Pythonのプログラムを好きなタイミングで停止させることが出来ます。

この記事では、

  • 3種類のexitの違いについて
  • sys.exit関数の使い方
  • といった基本的な内容から、

  • sys.exit関数で終了ステータスを返す方法
  • を通して、実際のプログラミングでsys.exit関数がどう使われるのかを解説します。

    ※ この記事のコードはPython 3.7で動作確認しました。

    プログラムを終了させる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関数の詳しい使い方は、こちらの記事をご覧ください。

    【Python入門】range関数を使ってリストを作ろう!
    更新日 : 2019年5月9日

    実行結果

    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 $?」で終了ステータスが確認ができます。

    これは直前のプログラムの終了ステータスが「$?」という特殊変数に自動的に代入されるからです。

    この終了ステータスを使うことで、大規模なプログラムを作る際にも終了ステータスを確認しながらのデバッグがしやすくなります。

    [email protected]: ~/workspace$ python exit1.py
    2
    3
    Error
    
    [email protected]: ~/workspace$ echo $?
    1

    まとめ

    Pythonのexit関数は3つの種類があり、目的も何かを終了させるということでは同じです。

    しかし終了させる対象と目的が違うことがわかっていただけたかと思います。またsys.exit関数にはプログラムを終了させるだけではなく、終了ステータスをつけることもできます。

    終了ステータスを効果的に利用することで、より開発のスピードが速くなりますよ!

    LINEで送る
    Pocket

    最短でエンジニアを目指すなら侍エンジニア塾

    cta_under_bnr

    侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

    あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

    無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

    無料体験レッスンの詳細はこちら

    書いた人

    ryo

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説