AI資格ドリル
資格を選ぶ

用語比較

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

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

終了のたびに import sys を書くのが面倒で exit() を使いたい人

exit() は import なしで使えますが、公式の説明では対話的インタープリタ向けで、プログラム中では使うべきではない名前です。スクリプトには import sys をして sys.exit() を書く形が基本です。

02

sys.exit() を呼ぶと、後始末の処理が飛ぶのか心配な人

sys.exit() は例外を送出するだけなので、try 文の finally 節の後始末は実行されます。Python 3.9.6 で、sys.exit(3) を try と finally で囲むと、finally の出力が出たあとに SystemExit が外へ伝わりました。

03

エラーメッセージを出して終わりたい人

sys.exit に文字列を渡すと、その文字列が stderr に出力され、終了コードは 1 になります。公式は、エラー時に手早くプログラムを終了する方法としています。

04

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. 1

    使う場所を見る

    スクリプトやプログラムの中なら sys.exit()、対話的インタープリタで手早く終えるなら exit() です。

  2. 2

    終了コードを決める

    正常終了ならゼロ(引数なし)、異常終了ならゼロ以外の整数、メッセージを出したいなら文字列を渡します。

  3. 3

    例外であることを意識する

    どちらも SystemExit を送出するだけです。finally 節は動き、外側の except で捕捉もできます。

  4. 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 節が実行されると説明できる

同じ資格で次に知りたいこと

よくある質問

Qsys.exit() と exit() の違いは?

A

どちらも SystemExit を送出しますが、sys.exit() は sys モジュールの関数でスクリプト向け、exit() は site モジュールが追加する対話的インタープリタ向けの名前で、公式はプログラム中では使うべきでないとしています。

Qsys.exit() を呼ぶと finally 節は実行されますか?

A

実行されます。sys.exit() は例外を送出するだけなので、try 文の finally 節で指定した後始末は動きます。

Qsys.exit() の引数に文字列を渡すとどうなりますか?

A

文字列は stderr に出力され、終了コードは 1 になります。引数が None の場合は、ゼロを渡すのと同じです。

Qsys.exit() は Python3 エンジニア認定基礎試験に出ますか?

A

このサイトの事実リストでは、sys.exit() は標準ライブラリの紹介(コマンドライン引数の節)に挙がる名前です。公式チュートリアルの「スクリプトを終了させるもっとも直接的な方法」という説明を押さえておくと安全です。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)