pythonとscalaのファイルの自動クローズ

February 7, 2011 - Scala, python

エキスパートPythonプログラミングを少しずつ読み進めています。といっても気になるタイトルを拾い読みですが。

そのなかの”2.4 withとcontextlib”の章のwith文の例としてファイル読み込みのコードが書いてました。 たったこれだけで、自動クローズまでやってくれるみたい。

さらに、with文を使うためのクラス定義も可能らしい。

実装すべきは下記2メソッドのみ。

  • enter(self)
  • exit(self, exception_type, exception_value, exception_traceback)
enterの戻り値はasで受けとれます。 exitで例外処理のfinallyに当たる処理を書きます。何も返さないと例外はその呼び出し元に伝播します。

さらにさらに、contextlibというモジュールを使えば、もっと自然に書けます。 ※これは、contextmanager内のfinally句でcloseを書くのと同じ。(参考)

Scalaでwith(っぽいもの)を実装

pythonのwith文と同様の記述方法をScalaでやるとしたら…こんな感じでしょうか。

ファイルの自動クローズについてはこちらを参考にさせていただきました。