with コンテキスト管理
最終更新:2026-09-22
with コンテキスト管理
with 文はコードブロックへの進入時と退出時にコンテキストマネージャの __enter__ / __exit__ を呼び出す;ファイル/ロック/接続によく使われる。
| カテゴリ | キーワード/文 |
|---|---|
| 種類 | キーワード/文 |
| Python バージョン | all |
📝 構文
with expr [as target]:
block
▶ 例
下のコードを編集し「実行」をクリックすると、出力パネルに結果が表示されます:
実行結果:
closed: True
💡 ヒント with は try/finally よりも明確で、公式に推奨されるリソース管理方法である。
💡 関連するケース
さらに多くのケースは近日公開予定です。
❓ よくある質問
Q`with` でファイルを開いた後、手動で close する必要はありますか?
Aありません。`with` はブロックを抜けるとき(`__exit__` 経由で)自動的にファイルの `close()` を呼び、途中で例外が起きても閉じます。これが公式推奨のリソース管理の書き方です。
Q`with` で複数のリソースを同時に管理できますか?
Aできます。Python 3.10+ では `with (open(a) as f1, open(b) as f2):` と書けます。古いバージョンではネストした `with`、または `contextlib.ExitStack` で動的に管理します。
Q`with` の後ろの as 変数はブロックの外でも使えますか?
A変数名はまだアクセスできます(Python にはブロックスコープがありません)が、リソースはすでに閉じています。たとえば `with` の外でファイルを読み書きすると `ValueError: I/O operation on closed file` になります。