【Python】sys.exit()は例外を投げているだけ

f:id:hira98:20190630161737p:plain

【結論】

  • sys.exit()はプログラムを強制終了しているわけではなく、BaseException例外を投げているだけ。

  • よって、tryブロックでsys.exit()を呼ぶと強制終了しない。

  • os._exit()を呼べばtryブロックでも強制終了できるが一般的な書き方ではない。

【目次】

はじめに

結論に書いた内容が全てなので、補足説明は特にありません😅

なので、結論に書いた内容が正しいことの確証を得るために試したサンプルコードと結果だけを載せています。

サンプルソース

import sys
import os

def test(n):
   print(f"start n:{n}")
   try:
       print(" try_start")
       if n == 1:
           print("   sys.exit call")
           sys.exit(10)
       else:
           print("   os._exit call")
           os._exit(10)
       print(" try_end")
   except:
       print(" _except")
   finally:
       print(" _finally")
   print("end")

test(int(sys.argv[1]))

実行結果

$ python test.py 1
start n:1
 try_start
   sys.exit call
 _except
 _finally
end
$ python test.py 2
start n:2
 try_start
   os._exit call

参考情報

sys --- システムパラメータと関数 — Python 3.7.4rc1 ドキュメント

組み込み例外 — Python 3.7.4rc1 ドキュメント

os --- 雑多なオペレーティングシステムインタフェース — Python 3.7.4rc1 ドキュメント

さいごに

研修中に提出した日報に、次の作業を行えば本日のブログ完成🤪

  • 「はじめに」と「さいごに」の文章を追加する。
  • イラストを追加する。

研修中に学んだことをプライベートな時間を削って復習しており、かつ研修中に学んでいることは一般的なことだから、契約違反にはならないはずです🥺