Pythonでプログラムを途中で止める4つの方法|exit()とsys.exit()の使い分けを理解しよう
こんにちは、とまだです。
みなさん、Pythonでコードを書いていて「エラーが出たらプログラムを止めたい」と思ったことはありませんか?
実はPythonには、プログラムを終了させる方法がいくつもあるんです。
でも、それぞれ微妙に動きが違って混乱しますよね。
今回は現役のエンジニア、そして元プログラミングスクール講師としての経験から、プログラム終了の方法について解説します。
なぜプログラムを途中で止める必要があるのか
そもそも、なぜプログラムを途中で止める必要があるのでしょうか。
日常生活で例えてみましょう。
料理をしているとき、材料が足りないことに気づいたら、そのまま続けても、美味しい料理は作れませんよね。
一旦料理を中断して、買い物に行くはずです。
プログラムも同じなんです。
ファイルが見つからない。
入力された値がおかしい。
データベースに接続できない。
こんなときは、無理に処理を続けるより止めた方が安全です。
Pythonでプログラムを終了させる4つの方法
Pythonには主に4つの終了方法があります。
それぞれ使いどころが違うので、順番に見ていきましょう。
1. exit() - 対話モードでよく使う方法
exit()
は主に対話モード(REPL)で使います。
対話モードというのは、Pythonを起動してコマンドを1行ずつ実行するモードのことです。
def check_name(name):
if not name:
print("名前が入力されていません")
exit()
print(f"こんにちは、{name}さん")
check_name("")
print("この行は実行されません")
上記のコードでは、名前が空のときにプログラムが終了します。
ただし、exit()
には注意点があります。
実際のスクリプトファイルで使うと、環境によっては期待通りに終了しないことがあるんです。
2. quit() - exit()とほぼ同じ
quit()
は exit()
とほぼ同じ働きをします。
こちらも対話モード向けの機能です。
正直なところ、実際の開発では使う機会はほとんどありません。
対話モードを抜けるためのショートカット、くらいに考えておけば十分です。
3. sys.exit() - 実務で最もよく使う方法
実際の開発で最も使われるのが sys.exit()
です。
これは標準ライブラリの機能なので、まず import sys
が必要です。
import sys
def validate_age(age):
if age < 0:
print("年齢が不正です")
sys.exit(1) # エラーコード1で終了
print(f"あなたは{age}歳です")
validate_age(-5)
print("この行は実行されません")
sys.exit()
の便利なところは、終了コードを指定できることです。
終了コードとは、プログラムが正常に終わったか異常終了したかを示す番号です。
- 0: 正常終了
- 1以上: 異常終了(エラーの種類で使い分け)
郵便番号みたいなものですね。
番号を見れば、どんな理由で終了したかがわかります。
4. os._exit() - 強制終了が必要なとき
最後に紹介する os._exit()
は、かなり特殊な方法です。
import os
print("プログラム開始")
os._exit(1)
print("この行には絶対に到達しません")
この方法は、プログラムを本当に強制的に終了させます。
電源ボタンを長押しするようなイメージです。
通常の終了処理(ファイルのクローズなど)を飛ばしてしまうので、使用は慎重に。
マルチプロセスを扱うときなど、特殊な場面でのみ使います。
どの方法を使うべき?使い分けのポイント
結論から言うと、ほとんどの場合は sys.exit() を使えばOKです。
使い分けの目安はこんな感じです。
対話モードで作業を終えたいとき → exit()
か quit()
スクリプト内でプログラムを終了したいとき → sys.exit()
特殊な状況で強制終了が必要なとき → os._exit()
初心者のうちは sys.exit()
だけ覚えておけば困りません。
プログラム終了時の注意点
プログラムを終了させるときは、後片付けも大切です。
家を出るときに電気を消すように、プログラムも終了前にやるべきことがあります。
ファイルは必ずクローズする
import sys
def read_config(filename):
try:
with open(filename, "r") as f:
data = f.read()
return data
except FileNotFoundError:
print("設定ファイルが見つかりません")
sys.exit(1)
config = read_config("config.txt")
print("設定を読み込みました")
with
文を使えば、自動的にファイルがクローズされます。
これなら、エラーで終了してもファイルが開きっぱなしになりません。
ログを残す習慣をつけよう
なぜプログラムが終了したのか。
後で調べられるように、メッセージを残しておくと便利です。
import sys
def connect_database():
# データベース接続の処理(仮)
success = False
if not success:
print("データベース接続エラー: ホストに接続できません")
sys.exit(1)
connect_database()
エラーメッセージを出力してから終了する。
これだけで、デバッグがぐっと楽になります。
breakやreturnとの違い
「プログラムを止める」というと、break
や return
を思い浮かべる人もいるでしょう。
でも、これらは全く違うものです。
break
: ループを抜けるreturn
: 関数を抜けるexit()
/sys.exit()
: プログラム全体を終了
家の中で例えると。
break
は部屋から廊下に出る。
return
は2階から1階に降りる。
sys.exit()
は家から外に出る。
スコープ(影響範囲)が全然違うんです。
終了コードを活用したエラー処理
終了コードは、他のプログラムと連携するときに威力を発揮します。
import sys
def main():
# 処理の結果を判定
if error_occurred:
print("エラーが発生しました")
sys.exit(1) # エラーコード1
else:
print("正常に完了しました")
sys.exit(0) # 正常終了
if __name__ == "__main__":
main()
シェルスクリプトや自動テストから呼び出すとき。
終了コードを見れば、成功か失敗かがすぐにわかります。
信号機の色みたいなものですね。
0なら青(進んでOK)、それ以外は赤(何か問題あり)です。
GUIやWebアプリケーションの場合
ここまではコマンドラインのプログラムを想定してきました。
でも、GUIアプリやWebアプリは少し違います。
これらは常に動いていて、ユーザーの操作を待っています。
自動販売機みたいなものです。
ボタンが押されるのを、ずっと待機しているんです。
GUIなら「×」ボタンのクリックイベント。
Webアプリならサーバーのシャットダウン処理。
それぞれに適した終了方法があります。
ただし、基本的な考え方は同じです。
必要な後片付けをして、安全に終了する。
これが大切なポイントです。
まとめ
Pythonでプログラムを終了させる方法を整理すると。
まず覚えるべきは sys.exit()
です。
終了コードも指定できて、実務で最もよく使います。
対話モードなら exit()
で十分。
強制終了の os._exit()
は上級者向けです。
そして何より大切なのは、終了前の後片付けを忘れないこと。
ファイルのクローズ、ログの出力など、きちんと処理してから終了しましょう。
プログラムの終了方法一つとっても、奥が深いですよね。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →