【Python】sys.exit()は例外を投げているだけ
【結論】
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 ドキュメント
さいごに
研修中に提出した日報に、次の作業を行えば本日のブログ完成🤪
- 「はじめに」と「さいごに」の文章を追加する。
- イラストを追加する。
研修中に学んだことをプライベートな時間を削って復習しており、かつ研修中に学んでいることは一般的なことだから、契約違反にはならないはずです🥺