Python では、「with」ブロック内で return してもファイルは閉じられますか? 質問する

Python では、「with」ブロック内で return してもファイルは閉じられますか? 質問する

次の点を考慮してください。

with open(path, mode) as f:
    return [line for line in f if condition]

ファイルは適切に閉じられるでしょうか、それともreturn何らかの方法でバイパスされるのでしょうかコンテキストマネージャー?

ベストアンサー1

finallyはい、ブロックの後のブロックのように動作しますtry。つまり、常に実行されます (もちろん、Python プロセスが異常な方法で終了しない限り)。

これは、ペップ343これは次のステートメントの仕様ですwith:

with locked(myLock):
    # Code here executes with myLock held.  The lock is
    # guaranteed to be released when the block is left (even
    # if via return or by an uncaught exception).

ただし、言及する価値のあることは、ブロックopen()全体をブロックwith内に入れなければ、呼び出しによってスローされた例外を簡単にキャッチできないということですtry..except。これは通常、望ましいことではありません。

おすすめ記事