過去の日記

2013-01-10 [長年日記]

sys.exit()は"即座に終了する"関数ではない [Python]

SystemExitという例外を送出する関数。
sys.exit()に渡した引数をcodeで取れるので

try:
    with closing(codecs.open('executing', 'a', 'utf-8')) as f:
        #f.write()とかなんとか
        if 正常終了:
           sys.exit(0)
        else:
           sys.exit(1)
except SystemExit, e:
    if e.code==0:
        os.rename('executing', 'executed')
    else:
        os.remove('executing')
    raise

みたいな、大域脱出の後処理もできる。
大きなシステムには出番がないだろうけど、"小さなスクリプト"とは言えない程度に大きめなプログラムで使えそう。