説明
open() で取得したファイルを、with 文や確実な close() 呼び出しなしで使うと、例外発生時にファイル記述子が解放されないおそれがあります。
想定される影響
- リクエストの繰り返しでファイル記述子が枯渇し、サービス拒否につながる可能性があります。
- ファイルのロック解除や一時ファイルの削除が遅れることがあります。
対処方法
with open(...) as f:の形でファイルを開いてください。withを使えない場合は、try/finallyのfinallyで必ずclose()を呼び出してください。
例
変更前
python
handle = open(path)
return handle.read()
変更後
python
with open(path) as handle:
return handle.read()
解説:
- 変更前:
with文や確実なclose()呼び出しがないため、例外が起きるとファイル記述子が解放されない場合があります。 - 変更後:
with open(...) as f:を使うことで、ブロックを抜ける際にファイルが自動的に閉じられます。