Python2.5新機能ピックアップ (1) : Unified try/except/finally
 2006.09.20

独断と主観で選んだPython2.5の新機能の紹介シリーズ(1).6 PEP 341: Unified try/except/finally について. 2.5以前のPythonでは finally節を持つtry節にはexceptionを書けませんでした.なので,以前はこんなコードを書いていたのです.
lock = threading.Lock()
try :
    lock.acuire()
    try :
        ... do something ...
    except ValueError :
        ... handling exception ....
finally :
     lock.release()
ロックの解放を確実にするためにfianlly節に書きたいのだが,except節とfinally節は同時には書けないので,入れ子のtryでしのいでたんです. これが,Python2.5からは同時に書けるので以下のようにすっきりします.
lock = threading.Lock()
try :
    lock.acquire()
    ... do something ...
except ValueError :
    ... handling exception ...
finally :
    lock.release()
ちなみに,例外が発生しなかった場合に実行されるelse節も同時に書けます.
カテゴリー:python&zope