Pythonを途中で終了させる方法!sys.exitやbreak等の使い分け

Pythonを途中で終了させる方法!sys.exitやbreak等の使い分け

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:2,064

Pythonプログラムを途中で終了させる様々な方法(sys.exit、break、return、os._exit等)を徹底解説します。状況に応じた適切な使い分けや、クリーンアップ処理の重要性についても分かりやすく説明します。

Pythonユーザにお勧めの本 ↗

初心者向け

1週間でPythonの基礎が学べる本

難易度
実用性
読みやすさ

「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。

PythonPython [パイソン]汎用プログラミング言語でプログラムを開発していると、「エラーが発生したから処理を止めたい」「目的のデータが見つかったから検索を終了したい」といったように、プログラムを途中で終了させる場面が必ず出てきます。

しかし、Pythonにはプログラムや処理を途中で終了させるための手法が複数存在し、それぞれ役割や適した状況が異なります。

この記事では、Pythonプログラムを途中で終了させる代表的な方法と、それぞれの使い分けについて詳しく解説します。

Pythonプログラムを途中で終了させる主な方法(sys.exit等)

Pythonスクリプト全体を途中で終了させたい場合、標準的な方法がsys.exit()を使用することです。

sys.exit()でPythonスクリプトを終了する

sys.exit()を使用するには、標準ライブラリのsysモジュールをインポートする必要があります。

import sys
print("処理を開始します。")
# 何らかの条件でプログラムを終了させる
if True:
print("条件を満たしたため、プログラムを終了します。")
sys.exit()
print("この行は実行されません。")

sys.exit()が呼び出されると、内部的にSystemExit例外が発生し、プログラムが終了します。

[!NOTE] 厳密には、SystemExit例外が捕捉されず、メインスレッドで発生した場合にプロセス全体が終了します。メインスレッド以外でsys.exit()を呼び出した場合は、そのスレッドのみが終了します。 try...except SystemExit: のように意図的に例外を捕捉した場合は、終了を阻止してプログラムを続行させることも可能です。

終了ステータス(終了コード)を指定して正常・異常終了を分ける

sys.exit()の引数には、終了ステータスを渡すことができます。これにより、OSOS [オーエス]Operating System。基本ソフトウェアや呼び出し元のプログラムに対して、正常終了か異常終了かを伝えることができます。

  • 0: 正常終了(デフォルト)
  • 0以外: 異常終了

また、整数の代わりに文字列を渡すことも可能です。その場合、文字列のメッセージが標準エラー出力に表示され、終了コードは自動的に1となります(例:sys.exit("エラー"))。

import sys
try:
# 処理...
raise ValueError("エラー発生")
except ValueError as e:
print(f"エラーにより終了します: {e}")
sys.exit(1) # 異常終了としてステータス1を返す

for文やwhile文のループ処理だけを途中で終了させる「break」

プログラム全体ではなく、for文やwhile文などのループ(繰り返し処理)のみを途中で抜けたい場合は、break文を使用します。

for i in range(10):
if i == 5:
print("iが5になったのでループを終了します。")
break
print(i)
print("ループ外の処理は引き続き実行されます。")

breakを使うと、そのループ構造から直ちに脱出し、ループの次の行から処理を継続します。プログラム自体は終了しません。

関数の処理を途中で終了(中断)させる「return」

関数の中で処理を途中で終了し、呼び出し元に戻りたい場合はreturn文を使用します。

def check_positive_number(num):
if num < 0:
print("負の数が入力されました。処理を終了します。")
return # ここで関数を抜ける
print(f"入力された正の数: {num}")
check_positive_number(-5)
print("関数の外の処理は継続します。")

returnはあくまで「関数の終了」であり、プログラム全体の終了ではありません。

Pythonの通常の終了処理を行わずにプロセスを終了させる「os._exit()」

os._exit()は、Pythonの通常の終了処理を行わず、プロセスを即座に終了させます。

import os
print("処理開始", flush=True)
os._exit(1)
print("この行は絶対に実行されません")

通常のスクリプトでos._exit()を使うことは推奨されません。主にos.fork()を利用したマルチプロセス処理において、子プロセスのみを即座に終了させたいといった特殊なケースで使用されます。

ターミナル(対話モード)を終了させる「exit()」と「quit()」

Pythonのインタラクティブシェル(REPL)を終了するために、exit()quit()と入力することがあります。

これらはsiteモジュールによって提供される対話環境用のショートカットであり、実際のプログラム(スクリプトファイル)の中で使用することは推奨されていません。スクリプトを終了させる際は、必ずsys.exit()を使用するようにしましょう。

例外処理(SystemExit)を使ってプログラムを終了させる方法

sys.exit()は内部的にSystemExit例外を発生させていると説明しましたが、自分で明示的にこの例外を発生させることでもプログラムを終了できます。

print("処理開始")
raise SystemExit("終了メッセージを指定して終了")

try…finallyブロックで終了直前にクリーンアップ処理を実行する

sys.exit()raise SystemExitによる終了は、try...finallyブロックを使用することで、終了直前に必ず実行したい処理(ファイルのクローズなど)を定義できます。

import sys
try:
print("ファイルを開いて処理を行います...")
sys.exit()
finally:
print("プログラム終了直前に、ファイルのクローズ処理などをここで実行します。")

このように記述することで、途中で終了させた場合でも、リソースの解放などを安全に行うことができます。

まとめ:Pythonを途中で終了させる手法の状況別使い分け

Pythonを途中で終了させる各手法の使い分けは以下の通りです。

  1. プログラム全体を終了させたい
    • 基本は sys.exit() を使用する。
    • 終了ステータス(0は正常、1などは異常)を適切に返す。
  2. 一部の処理だけを終了させたい
    • ループを抜けるなら break
    • 関数を抜けるなら return
  3. 特殊な強制終了
    • マルチプロセスの子プロセス終了時などは os._exit()

これらの違いを理解し、状況に応じて最適な終了方法を選択することで、予期せぬバグを防ぎ、安全でメンテナンスしやすいPythonプログラムを作成することができます。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Pythonユーザにお勧めの本 ↗

初心者向け

1週間でPythonの基礎が学べる本

難易度
実用性
読みやすさ

「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。

人気記事


記事を評価

Thanks!
目次
Scroll to Top