15章コンテキストマネージャとelseブロック

コンテキストマネージャはサブルーチンそのものと同じくらい重要になるかもしれません。わたしたちは、これについてはまだ表面しか触れていません。(中略)BASICにはwith文があり、多くの言語にもwith文があります。しかし、どれも機能的には異なりますし、やれることはとても浅いものです。ドットを連発しながら(属性を)参照しなくても済むようにするだけで、設定や終了処理はしません。名前が同じだというだけで、同じものと判断しないでください。with文は非常に重要です。

——Raymond Hettinger雄弁なPythonの伝道者PyCon US 2013のキーノート「What Makes Python Awesome」より[15-01]†1

[†1] with文のくだりはビデオの23:00~26:15の間に登場します。

本章では制御フロー機能を説明します。ここで取り上げる機能は他の言語ではあまり一般的ではないため、Pythonでも見過ごされたり、あまり活用されなかったりする傾向があります。具体的には次の機能です。

  • with文とコンテキストマネージャ
  • forwhiletry文で使うelse

with文はコンテキストマネージャオブジェクトの制御下で、一時的なコンテキストを設定し、確実に終了処理をします。これによりエラーを防止し、テンプレートそのままなコードを減らし、同時にAPIを安全かつ簡単に使えるようにします。Pythonプログラマはファイルを自動的に閉じるという目的にとどまらず、より広い適用範囲を見出しています。

elsewithはお互いまったく関係ないのですが、もう第Ⅴ部に入っており、他にelseを説明する場所もなければ1ページだけの章を起こしたくはないので、ここで説明させてもらいます。 ...

Get Fluent Python ―Pythonicな思考とコーディング手法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.