用語比較
sys.exit() と exit() の違い|スクリプトの終了にどちらを書くか(Python3基礎)
どちらも指定した終了コードで SystemExit を送出し、プログラムを終わらせます。違いは、使う場所です。
公式ドキュメントは、スクリプトの終了には sys.exit() を使い、exit() は対話的インタープリタ用の名前として整理しています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
sys.exit()とexit()の要点
sys.exit()
sys モジュールの関数。SystemExit 例外を送出する。公式チュートリアルは、スクリプトを終了させるもっとも直接的な方法とする。
exit()
site モジュールが組み込みに追加する名前。対話的インタープリタで有用で、プログラム中では使うべきではないとされる。
共通する点
どちらも SystemExit を送出する。終了コードの渡し方も同じ。
違いを表で確認
| 比較軸 | sys.exit() | exit() |
|---|---|---|
| どこで定義されるか | sys.exit():sys モジュール。import sys が必要 | exit():site モジュールが起動時に組み込みへ追加する。import は不要 |
| 想定された使い場所 | sys.exit():スクリプト・プログラム | exit():対話的インタープリタ(公式はプログラム中では使うべきでないとする) |
| 送出するもの | sys.exit():SystemExit 例外 | exit():指定した終了コードで SystemExit 例外 |
| site モジュールが無効な場合 | sys.exit():使える | exit():site を読み込まない -S 指定の起動では追加されない |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
終了のたびに import sys を書くのが面倒で exit() を使いたい人
exit() は import なしで使えますが、公式の説明では対話的インタープリタ向けで、プログラム中では使うべきではない名前です。スクリプトには import sys をして sys.exit() を書く形が基本です。
sys.exit() を呼ぶと、後始末の処理が飛ぶのか心配な人
sys.exit() は例外を送出するだけなので、try 文の finally 節の後始末は実行されます。Python 3.9.6 で、sys.exit(3) を try と finally で囲むと、finally の出力が出たあとに SystemExit が外へ伝わりました。
エラーメッセージを出して終わりたい人
sys.exit に文字列を渡すと、その文字列が stderr に出力され、終了コードは 1 になります。公式は、エラー時に手早くプログラムを終了する方法としています。
sys.exit() を呼んでも終わらないことがあると聞いた人
sys.exit() は例外を送出するだけなので、外側の try 文の except で SystemExit を捕捉すると、終了は防げます。公式は、メインスレッドで呼ばれ、例外が捕捉されない場合にだけプロセスが終了すると述べます。
具体例で使い分ける
例 1
終了コードを渡して、外側で受け取る場合
try と finally の中で sys.exit(3) を呼び、外側で except SystemExit で受けます。
- sys.exit(3) は SystemExit を送出する。
- 内側の finally 節は実行され、メッセージが出る。
- 外側の except が受け取ると、e.code は 3 になる。
結論: sys.exit() は例外を送出するだけで、finally は動き、捕捉もできます。(Python 3.9.6 で実行)
例 2
引数を変えて終了コードを比べる場合
引数なし、文字列、整数 3 の3通りで sys.exit() を呼びます。
- 引数なしでは、SystemExit の code が
Noneで、終了コードはゼロ(正常終了)として扱われる。 - 文字列 'エラーです' を渡すと、stderr にその文字列が出て、終了コードは 1 になった。
- 整数 3 を渡すと、終了コードは 3 になった。
結論: 整数はそのまま終了コード、文字列は stderr に出して 1、引数なしは正常終了です。(Python 3.9.6 で実行)
例 3
exit(2) を別プロセスで実行した場合
Python 3.9.6 の別プロセスで、import なしで exit(2) を呼びます。
- exit は標準の起動では組み込みに用意されているので、import なしで呼べる。
- 終了コードは 2 になった。
結論: 動作はしますが、公式は対話用の名前とし、プログラム中では使うべきでないとしています。(Python 3.9.6 で実行)
問題文から答えを選ぶ手順
- 1
使う場所を見る
スクリプトやプログラムの中なら sys.exit()、対話的インタープリタで手早く終えるなら exit() です。
- 2
終了コードを決める
正常終了ならゼロ(引数なし)、異常終了ならゼロ以外の整数、メッセージを出したいなら文字列を渡します。
- 3
例外であることを意識する
どちらも SystemExit を送出するだけです。finally 節は動き、外側の except で捕捉もできます。
- 4
import を確かめる
sys.exit() には import sys が必要です。
試験での見分け方
- 1sys.exit() は、SystemExit 例外を送出してインタープリタを終了する意図を示す。
- 2公式チュートリアルは、sys.exit() をスクリプトを終了させるもっとも直接的な方法と述べる。
- 3exit() は site モジュールが追加する名前で、対話的インタープリタで有用だが、プログラム中では使うべきではない。
- 4sys.exit() に整数を渡すと終了コードになる。ゼロは正常終了、ゼロ以外は異常終了とみなされる。
- 5sys.exit() の後でも、try 文の finally 節の後始末は実行される。
誤答しやすい選択肢
sys.exit() はその場でプロセスを強制終了すると考える
修正: sys.exit() は SystemExit 例外を送出するだけです。finally 節は実行され、外側で捕捉すれば終了を防げます。
exit() をスクリプトの標準的な終了方法だと考える
修正: exit() は site モジュールが追加する対話用の名前で、公式はプログラム中では使うべきではないとしています。
sys.exit('メッセージ') の終了コードがゼロだと考える
修正: 文字列を渡すと、stderr に出力され、終了コードは 1 になります。
sys.exit() を import なしで呼ぶ
修正: sys.exit() は sys モジュールの関数なので、先に import sys が必要です。
確認問題
Q1公式チュートリアルが、スクリプトを終了させるもっとも直接的な方法とするのは?
答え: sys.exit()
sys モジュールの関数で、SystemExit 例外を送出します。
Q2sys.exit(3) の後、try 文の finally 節は実行されますか?
答え: 実行される
sys.exit() は例外を送出するだけなので、後始末の finally 節は動きます。
Q3sys.exit('エラーです') を呼ぶと、メッセージはどこに出力され、終了コードはいくつになりますか?
答え: stderr に出力され、終了コードは 1
整数以外のオブジェクトは stderr に出力され、終了コードは 1 になります。None はゼロと同じです。
Q4exit() を定義して組み込みに追加するのは、どのモジュールですか?
答え: site モジュール
対話的インタープリタで有用な名前として追加され、公式はプログラム中では使うべきでないとします。
到達チェック
- sys.exit() が SystemExit 例外を送出するだけだと説明できる
- 引数なし・整数・文字列を渡したときの終了コードを言える
- exit() が site モジュール由来の対話用の名前だと説明できる
- sys.exit() の後でも finally 節が実行されると説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- csv.reader と csv.DictReader の違い|行をリストで読むか、辞書で読むか(Python3基礎)
csv.reader は各行を文字列のリスト、csv.DictReader は各行を辞書で返します。見出し行の扱い、fieldnames・restkey・restval、数値が文字列のままになる点、newline='' の指定を、Python 3.9.6 の実行結果と公式ドキュメントで照合して整理します。
- Python3エンジニア認定基礎試験とデータ分析試験の違い(出題範囲・主教材・受験の順番)
Python3エンジニア認定基礎試験(文法基礎・60分・40問)とデータ分析試験(NumPy・pandasなど4つのライブラリ・40問)の違いを、主教材、章ごとの出題数、受験料、公式の受験ステップで整理。どちらから受けるかの判断手順と確認問題つき。
- timeitとprofileの違い|小さなコード片の比較か、ボトルネックの特定か(Python3基礎)
timeitモジュールとprofile・pstatsモジュールの違いを、計測する単位と目的で整理します。Python公式チュートリアル10.10の記述、タプルの入れ替えの計測例、確認問題つき。
よくある質問
Qsys.exit() と exit() の違いは?
どちらも SystemExit を送出しますが、sys.exit() は sys モジュールの関数でスクリプト向け、exit() は site モジュールが追加する対話的インタープリタ向けの名前で、公式はプログラム中では使うべきでないとしています。
Qsys.exit() を呼ぶと finally 節は実行されますか?
実行されます。sys.exit() は例外を送出するだけなので、try 文の finally 節で指定した後始末は動きます。
Qsys.exit() の引数に文字列を渡すとどうなりますか?
文字列は stderr に出力され、終了コードは 1 になります。引数が None の場合は、ゼロを渡すのと同じです。
Qsys.exit() は Python3 エンジニア認定基礎試験に出ますか?
このサイトの事実リストでは、sys.exit() は標準ライブラリの紹介(コマンドライン引数の節)に挙がる名前です。公式チュートリアルの「スクリプトを終了させるもっとも直接的な方法」という説明を押さえておくと安全です。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
