tryの使い方
私はずっとtry - catch - finallyの使いどころがわからず、苦手にしてきたのですが、なんとなく掴めてきたように思います。なお、pythonではtry - except - finallyです。
Pythonにおけるtryには、except、else、finallyがあって、exceptは例外発生時に、elseは例外の発生しなかった時に、finallyは例外が発生してもしなくても、実行されます。このあいだからデータベースの処理をやってますけど、例外の発生するかも知れないSQLの実行をtryで包んで、例外が出たら処理を確定(commit)せずにデータベースを閉じて、例外をraiseする、例外が出なかったら処理を確定してデータベースを閉じる、みたいにしてやればいいんですね。わかればすごく簡単なことだ。
ただし、SQLがSELECT文みたいなものだと、commitする必要はないので、例外が発生してもしなくても閉じてやればいい。そういう時にはfinallyを使うと。簡単に書いてみるとこんな感じ?
# SELECT文の場合 try: cursor.execute('select * from table where id=?;', \ (id,)) result = cursor.fetchall() except: raise finally: cursor.close() connection.close() # DELETE文の場合 try: cursor.execute('delete from table where id=?;', \ (iid,)) except: cursor.close() connection.close() raise else: cursor.close() connection.commit() connection.close()
もちろん、条件によって処理は違ってくるんだけど、おおむねこんな感じになるんだろうと思います。それで、場合によってはwithステートメント(2.5以降)を使うんでしょうけど、私はこれがいまいちわかってないので、まだ試したことがありません。チュートリアルにも書いてあるんですけどね。