このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【Python】exit,sys.exit,os._exitの違いを紹介

exit,sys.exit,os._exitの違いを紹介

今回はPythonの3つのexit(exit, sys.exit ,os._exit)の違いを紹介します。

いずれもexit(終了)を意味しますが、それぞれ役割が微妙に異なります。
基本的にプログラムの終了ではsys.exitを書けばOKというあたりまで学んで帰って行ってください。

この記事では↓の内容が分かります。

  • 3つのexitの役割
  • 3つのexitの使い分け方

3つのexitの用途

初めに3つのexitの用途を紹介します。

下表を見れば基本的な使い分け方が分かると思います。

種類用途ポイント
exit対話型モードを終了させるエラーコードを返さない
sys.exitプログラムを終了させるエラーコードを返す
os._exitプログラムを終了させる(プロセス全体を終了させる)エラーコードを返さない
3つのexitの用途

3つのexitの用途はこのようになります。

まずexitはシェルなどの対話型モードを終了させるために使います。

そして、sys.exitとos._exitはプログラムを終了させるために使います。

この2つはプログラムを終了させるために使うのですが、基本的にos._exitは使いません。こちらはプロセス全体を終了させるもので、いわゆる強制終了に近い処理のため特別な理由がない限りは使わないようにしましょう。

そのため、プログラムの終了ではsys.exitを使うようにしてください。

sys.exit関数について

sys.exitはプログラムの実行を終了するだけでなく、終了コードを指定することもできます。

終了コードは整数値であり、0は正常終了を示し、0以外の値はエラーコードを表します。

import sys

try:
    sys.exit("エラーメッセージ")
except SystemExit as e:
    print(e) # エラーメッセージ

sys.exitはSystemExit例外を投げるため、例外処理によって終了時の後始末を行うこともできます。

サンプルコードのようにtry内でsys.exitが実行されると、例外が投げられるためエラーハンドリングをすることができます。sys.exitの引数に文字列を入れると、エラーメッセージを投げることもできます。

このようにsys.exitはエラーコードの指定や例外処理が可能です。一般的には、通常のプログラムの終了にはsys.exitを使用することが推奨されます。

os._exit関数について

os._exitは、osモジュールの関数であり、Pythonプロセスを直ちに終了するために使用されます。os._exitは通常の終了処理を行わずにプロセスを即座に終了させるため、例外処理やクリーンアップコードは実行されません。

os._exitは、sys.exitやexitとは異なり、プロセス全体を終了させます。

これにより、プログラムがいかなる状態にあっても、未処理のバッファリングやクリーンアップを行うことなく終了します。そのため、os._exit()を使用する場合は注意が必要です。

一般的に、プログラムの通常の終了やエラーハンドリングにはsys.exitを使うべきです。

このように、os._exit()はプロセス全体を直ちに終了させるための関数であり、通常の終了処理や例外処理は行われません。そのため、特別な理由がない限りは使わないようにしましょう。

Python

Posted by やろまい