with文を使うことによって、ファイルの閉め忘れやメモリの解放し忘れを防ぐことができ、例外処理にも強いより安全なプログラムを書くことができます。
よく使うファイル操作を例としてwith文について説明します。
with文を使ったファイルの読み込み
ファイルを読み込むには通常open()によってファイルを開き、読み込んだ後最後にclose()でファイルを閉じます。以下はwith文を使わずにファイルを読み込む例です。
1 2 3 |
f = open("sample.txt", "r") print f.read() f.close() |
しかし、close()を書き忘れてしまったり、処理の途中で例外が発生するとclose()が呼び出されず、メモリ上に無駄なリソースが残ることになります。そこで、with文を使ってファイルの読み込みを記述すると以下のようになります。
1 2 |
with open("sample.txt", "r") as f: print f.read() |
withブロックを抜けると自動的にclose()が呼び出されるため、close()を記述する必要がなくなります。
ブロック内で例外が発生した場合も同様で、try...except...finallyといった定型的な例外処理を隠蔽して便利かつ安全にプログラムを書くことができます。
もしwith文を使用せずに書いた場合は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
f = None try: f = open("sample.txt", 'r') try: print f.read() except: raise finally: if f: f.close() |
with文を使用したプログラムの方が簡潔で見通しも良くなります。