##
9 with文とコンテキストマネージャ

バージョン 2.5 で 新たに追加 された仕様です。

コンテキストマネージャとは、 `with`文の実行時にランタイムコンテキストを定義する オブジェクトです。 コンテキストマネージャは、 コードブロックを実行するために必要な入り口および出口の処理を扱います。 コンテキストマネージャは通常、 `with`文（7.5の章を参照）により起動されますが、 これらのメソッドを直接呼び出すことで起動することもできます。

コンテキストマネージャの代表的な使い方としては、 様々なグローバル情報の保存および更新、リソースのロックとアンロック、 ファイルのオープンとクローズなどが挙げられます。

コンテキストマネージャのより詳細な情報は、 Python Library Reference にある ``Context Types'' を参照してください。

`__enter__`( | self)

  コンテキストマネージャのの入り口で実行される処理です。 `with`文は、文の`as`節で規定された値を返す このメソッドを呼び出します。

`__exit__`( | self, exc_type, exc_value, traceback)

  コンテキストマネージャの出口で実行される処理です。 パラメータは、コンテキストが終了した原因となった例外について 説明しています。 コンテキストが例外を送出せず終了した場合は、 全ての引き数に `None` が設定されます。

  もし、例外が送出され、かつメソッドが例外を抑制したい場合 （すなわち、例外が伝播されるのを防ぎたい場合）、 このメソッドは True を返す必要があります。 そうでなければ、このメソッドの終了後、 例外は通常通り伝播することになります。

  `__exit__()`メソッドは受け取った例外を再度 送出すべきではありません。 これは、呼び出し側の責任でおこなってください。

参考:

PEP 0343, The "with" statement
  Python の `with` 文の 仕様、背景、および例が記載されています。