@snafu
Wo siehst du denn jetzt ein "yield"?!
yield hat mit einem Context-Manager per se erstmal nichts zu tun, sondern dient zu Implementierung von Generator-Funktionen. Ein Zusammenhang besteht nur, wenn man einen Generator mit contextlib.contextmanager() nutzt. "yield" macht aber auf keinen Fall eine Funktion "schließbar" (was immer das auch sein soll).
Auch hat ein Context-Manager per se nichts mit Streams zu tun. Context-Manager kann man für alles mögliche implementieren, z.B. auch für Locks. Bei der Arbeit mit readline sind sie auch manchmal ganz hilfreich.
Irgendwie hast du den Sinn, Zweck und Implementierung des with-Statements noch nicht so ganz verstanden
@str1442
bz2.BZ2File implementiert das Context-Manager-Protokoll nicht (zumindest in Python 2.5). Das gilt für viele andere Module aus der Standardbibliothek auch (z.B. urllib, urllib2, StringIO, etc.).