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` になります。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%