#python #プログラム終了関数 #exit
この記事では、pythonにおいて、プログラムを実行した時に、自身のプログラムを終了させる関数について、わかりやすく解説します。
本記事を読むにあたって
本記事内のプログラムを実践するには、下記の記事に従って環境を準備してください。
・ 【第2回】pythonのプログラミング環境を作る
3種類もある終了関数
pythonでは、終了関数は以下の3種類あります。
1.sysモジュールのexit関数(sys.exit)
2.osモジュールの_exit関数(os._exit)
3.組み込み関数exit
以降の見出しで、上記それぞれに対して解説します。
sysモジュールのexit関数(sys.exit)
通常はsys モジュール のexit関数を使用します。
この関数は、自身のプログラムを実行している プロセス を終了させます。
終了させるにあたって、必要な後始末を行います。
<exit.py>
import sys # pythonのシステム関連のモジュールをインポート
sys.exit(-1) # 終了コード -1 で終了する
実行すると以下のようになります。
(base) PS D:\blog\exit> python .\exit.py
(base) PS D:\blog\exit> echo $?
False
(base) PS D:\blog\exit> echo $LastExitCode
-1
Anaconda Powershell Prompt での実行結果ですので、
“echo $?”で、成功(True)か失敗(0)か、
“echo $LastExitCode”で、終了コードが返ってきたことが確認できます。
コマンドプロンプト の場合は、”echo %ERRORLEVEL%”で、終了コードが確認できます。
Linux の bash などの コマンドシェル では、”echo $?” だけで、終了コードが確認できます。
後述の 組み込み関数 であるexit関数ではなく、sys.exit関数を使用することを推奨します。
exit関数でも手前味噌で作成したプログラムの場合、sys.exit関数と変わらない挙動になり、何も問題ありません。
しかし、exit関数はpythonの対話型入力機能と密接な関係があり、pythonの対話型入力機能を使わないで実行するケースの場合に、思わぬ動作をすることがあります。
終了関数は使用頻度が高いため、クセになってexit関数を多用してしまいますので、最初から後々も考えて良い方を選択しましょう。
osモジュールの_exit関数(os._exit)
前述のsys.exit関数では、プログラム終了時にきちんと後始末を行って終了します。
それに対して、osモジュールの_exit関数は、後始末せずに即刻プログラムを終了します。
“exit”の前に“_”がついていますのでご注意ください。
<exit.py>
import os # OS関連のモジュールをインポート
os._exit(-1) # 終了コード -1 で終了する
os._exit関数は、後始末をしている間にエラーが起きても困るとか、後始末に時間がかかっても困るというような、緊急で終了させる必要がある場合に用いられます。
実行すると以下のようになります。
(base) PS D:\blog\exit> python .\exit.py
(base) PS D:\blog\exit> echo $?
False
(base) PS D:\blog\exit> echo $LastExitCode
-1
後始末には、例えばファイルのクローズ処理があります。
ファイルはオープンした後、クローズせずに終了すると、編集した内容が保存されずに終了してしまいます。
通信を行う処理が合った場合は、相手にクローズの連絡なく終了することになり、相手がまだ繋がっていると思って処理を続けてしまいます。
後始末せずに終了するということは、作業中に行方不明になったことと同じになります。
組み込み関数exit
組み込み関数 としてexit関数があり、 インポート しなくても使えるため便利ですが、前述のとおり、後々のことを考えると推奨ではありません。
<exit.py>
exit(-1)
実行すると以下のようになります。
(base) PS D:\blog\exit> python .\exit.py
(base) PS D:\blog\exit> echo $?
False
(base) PS D:\blog\exit> echo $LastExitCode
-1
本記事では、pythonの対話型入力機能を使って実行していますので、問題なく実行できています。
最後に
本記事では、プログラミングの基本の1つである終了関数の種類について解説しました。
1.sysモジュールのexit関数(sys.exit) ・・・ きれいに後始末をして終了させる
2.osモジュールの_exit関数(os._exit) ・・・ 後始末をしない代わりに即刻終了させる
3.組み込み関数exit ・・・ 対話型実行機能を使う場合に使い、きれいに後始末をして終了させる
次回は別の基本について解説しますので、ご期待ください!
この記事へのお問い合わせや、無料のサポート、一歩踏み込んだ有料サポートが必要な場合は、ホームページからメールで受け付けています。お気軽にご連絡ください。
コメント