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を途中で終了させる各手法の使い分けは以下の通りです。
- プログラム全体を終了させたい
- 基本は
sys.exit()を使用する。 - 終了ステータス(0は正常、1などは異常)を適切に返す。
- 基本は
- 一部の処理だけを終了させたい
- ループを抜けるなら
break - 関数を抜けるなら
return
- ループを抜けるなら
- 特殊な強制終了
- マルチプロセスの子プロセス終了時などは
os._exit()
- マルチプロセスの子プロセス終了時などは
これらの違いを理解し、状況に応じて最適な終了方法を選択することで、予期せぬバグを防ぎ、安全でメンテナンスしやすいPythonプログラムを作成することができます。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。