codecs.openにはwithステートメントが使えない
Python2.5以降で、withステートメントが使える。
with open('logfile', 'r') as logfile: logfile.write('hogehoge')
こうすると、open()で開いたファイルのclose()を暗黙的に、確実に呼んでくれる。withなしだと、こんなふうになって、ちょっと見苦しい。
logfile = open('logfile', 'r') try: logfile.write('hogehoge') finally: logfile.close()
さて、日本語のファイルを読み書きするとき、codecsモジュールのopen()を使うと便利だ。http://d.hatena.ne.jp/yach/20080308#p1
ところが、codecs.openはwithステートメントに対応しておらず、エラーも例外も出ない。原因はStreamReaderWriterの実装にあるらしい。ここに詳細があるが、このバグがどうなったかわからない。
とりあえず、codecs.openを使うときはwithステートメントが使えないということ。