Pythonのsys.exit()関数の引数とプロセスの戻り値

Last modified: 2021-09-21

Pythonのsysモジュールに含まれるsys.exit()という関数は、呼び出すとプログラムを終了し、引数をプロセスの戻り値とするが、その引数についてをここで扱う。

整数を引数に指定した場合

整数を引数に指定すると、指定された値がそのままプロセスの戻り値になる。

[任意]ファイル名:sysexittest_int.py エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys

# 整数ではそのままの値を戻り値とする
sys.exit(5)

下は実行例。

$ [sysexittest_int.pyの場所]
(出力なし)
$ echo ${?}
5

整数をsys.exit('5')のような文字列として渡した場合は、整数ではなく文字列を渡した場合(後述)と同じように扱われる。

Noneを指定した場合

Noneを指定すると、プロセスの戻り値は0(正常終了時の値)となる。

整数の0を指定しても同じ。

[任意]ファイル名:sysexittest_none.py エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys

# 「None」は正常終了・「0」でも同じ
sys.exit(None)

下は実行例。

$ [sysexittest_none.pyの場所]
(出力なし)
$ echo ${?}
0

文字列を指定した場合

文字列を指定すると、標準エラー出力に引数の内容を表示しつつプロセスの戻り値は0以外(正常ではない終了の値)になる。

これは何かのエラーが発生したときにメッセージを出力して終了し、0以外の戻り値も設定したいというときに役に立つ。

[任意]ファイル名:sysexittest_str.py エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys

# 文字列を指定するとその内容を表示エラー出力に出力しつつ0以外の戻り値を返す
sys.exit("Error !!")

下は実行例。

$ [sysexittest_str.pyの場所]
Error !!
$ echo ${?}
1

下は標準エラー出力に出力されていることの確認。

$ [sysexittest_str.pyの場所] > /dev/null
Error !!
$ [sysexittest_str.pyの場所] 2> /dev/null
(出力なし)

それ以外のデータを指定した場合

整数や文字列以外のデータ(小数,リスト型,文字列以外のオブジェクト型など)を指定した場合、プロセスの戻り値は文字列を指定した場合と同様となるが、表示のされ方が異なり、print()関数で表示したときと同じような形となる。

例えば、文字列以外のオブジェクト型では<[__name__の値].[クラス] instance at 0x......>のような形。

[任意]ファイル名:sysexittest_obj.py エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys

# 空の内容のクラス
class TestClass:
    pass

obj = TestClass()
# オブジェクトを渡してみる
sys.exit(obj)

下は実行例。

$ [sysexittest_obj.pyの場所]
<__main__.TestClass object at 0x7fbf2d04a110>
$ echo ${?}
1
  • 使用したバージョン
    • Python 2.6.6, 2.7.1, 3.1.3, 3.9.5