with文
Pythonでは前処理、後処理を必要とするオブジェクトを扱う時に、それを簡易的な構文で記述することができる仕組みがあります。 それがwith文であり、代表的な例としてはファイルを取り扱う時に用いられます。
ファイルオブジェクトは「開いてから」該当のファイルに対して操作を行い、それが終われば「閉じる」ことが必要なオブジェクトです。 これらを取り扱う際、開くことを忘れることはありえませんが、閉じることを忘れてしまう場合があります。 with文を使用すると、後処理として必ずファイルがクローズされるため、これを防止することができます。
# -*- coding: utf-8 -*-
with open('file.txt') as f:
#
# 何らかの処理を行う
#
print f.closed
print f.closed
--実行結果--
False True
「closed」は、ファイルが閉じられている状態の時にTrueが格納されます。実行結果からwithブロックを抜けた後はファイルが自動的にクローズされているのがわかります。
なおファイルに対して何らかの処理を行っている最中にエラーが発生した場合でも、ファイルはきちんとクローズされます。 つまり以下のような構文と同じことを簡易的に記述できることになります。
# -*- coding: utf-8 -*-
f = open('main.py')
try:
#
# 何らかの処理を行う
#
pass
except:
pass
finally:
f.close()
with文に対応するにはどうすれば?
▶応用編:コンテキストマネージャ
