次の点を考慮してください。
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
。これは通常、望ましいことではありません。