1. ホーム
  2. パイソン

[解決済み】Pythonで、"with "ブロックの中でリターンしても、ファイルは閉じますか?

2022-03-25 05:12:36

質問

次のように考えてください。

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

ファイルは正しく閉じられるのでしょうか? return を何らかの方法で回避することができます。 コンテキストマネージャー ?

解決方法は?

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

の例の1つにも書かれています。 PEP-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 というブロックがありますが、これは通常、人が望むものではありません。