バージョン 2.5 で 新たに追加 された仕様です。
with 文は、ブロックの実行を、コンテキストマネージャによって定義された メソッドでラップするために使われます( 3.4.9 セクションを 参照してください)。これにより、よくある try...except...finally 利用パターンを カプセル化して便利に再利用することができます。
with_stmt | ::= | "with" expression ["as" target] ":" suite |
with 文の実行は以下のように進行します:
注意: with 文は、__enter__() メソッドがエラーなく 終了した場合には __exit__() が常に呼ばれることを保証します。ですので、もしエラーが ターゲットリストへの代入中にエラーが発生した場合には、これは そのスイートの中で発生したエラーと同じように扱われます。
スイートが例外により終了した場合、 __exit__() メソッドからの戻り値は偽(false)であり、例外が 再送出されます。この戻り値が真(true)ならば例外は抑制され、そして 実行は with 文に続く分へ継続されます。
もしそのスイートが例外でない何らかの理由で終了した場合、その __exit__() からの戻り値は無視されて、実行は 発生した終了の種類に応じた通常の位置から継続します。
with_statement
機能が有効に
された場合にだけ許可されます。これは
Python 2.6 では常に有効になります。__future__
インポート文が
この機能を有効にするために利用できます:
from __future__ import with_statement
参考:
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。