with文 | Python-izm

with文

Pythonでは前処理、後処理を必要とするオブジェクトを扱う時に、それを簡易的な構文で記述することができる仕組みがあります。それがwith文であり、代表的な例としてはファイルを取り扱う時に用いられます。

with文の基礎

ファイルオブジェクトは開いてから該当のファイルに対して操作を行い、それが終われば閉じることが必要なオブジェクトです。これらを取り扱う際、開くことを忘れることはありえませんが、閉じることを忘れてしまう場合があります。with文を使用すると後処理として必ずファイルがクローズされるため、これを防止することができます。

with open('file.txt') as f:
    
    #
    # 何らかの処理を行う
    #
    
    print(f.closed)

print(f.closed)
False
True

closedは、ファイルが閉じられている状態の時にTrueが格納されます。実行結果からwithブロックを抜けた後はファイルが自動的にクローズされているのがわかります。なおファイルに対して何らかの処理を行っている最中にエラーが発生した場合でも、ファイルはきちんとクローズされます。つまり以下のような構文と同じことを簡易的に記述できることになります。

f = open('file.txt')

try:
    
    #
    # 何らかの処理を行う
    #
    pass

except:
    pass

finally:
    f.close()

すべてのオブジェクトがwith文で処理できるわけではありません。どういった方法を用いればよいのかは次のコンテキストマネージャで示します。