2017-05-28 5 views
2

ブロックを終了した後にwithブロックが自動的にclose()を呼び出し、ファイルを閉じることを忘れないようにすることがよくあることを理解します。withブロックまたはclose()Python以上ですか?

他よりPython的な一つの方法です?

with open(file, 'r+') as f: 
    do_things(f) 

f = open(file, 'r+') 
do_things(f) 
f.close() 

の間には技術的な差がないように見えますか私のコードではどうすればいいですか?

+3

2の間に大きな技術的な違いがあります! 'with'バージョンは、' do_things() 'が例外を発生させたとしても' close() 'が呼び出されることを保証します。この振る舞いに合うように、もう一方のバージョンに 'try'と' finally'を追加する必要があります。 – jasonharper

+1

FWIW、私はこの質問が3012488の重複ではないと思う。トピックは重複するが、他の質問は非常に幅広く、ファイルを閉じるためのPythonの方が具体的な方法については特に言及していない。 –

答えて

4

もう一方のPythonの方がいいですか?

はい、with-statement形式は、ファイル管理ロジックを1行のコードにカプセル化することをお勧めします。これにより、ビジネスロジックと管理ロジックの比率が向上し、プログラムの読みやすさと理由が簡単になります。 PEP 343パー

、と文の使用目的は次のとおりです。

This PEP adds a new statement "with" to the Python language to make 
it possible to factor out standard uses of try/finally statements. 
関連する問題