【Python】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の用途はこのようになります。
まず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()はプロセス全体を直ちに終了させるための関数であり、通常の終了処理や例外処理は行われません。そのため、特別な理由がない限りは使わないようにしましょう。