More extensive comment on __exit__ handling, per Guido's request.
diff --git a/Lib/contextlib.py b/Lib/contextlib.py
index 282fc51..d329087 100644
--- a/Lib/contextlib.py
+++ b/Lib/contextlib.py
@@ -34,6 +34,13 @@
except StopIteration:
return True
except:
+ # only re-raise if it's *not* the exception that was
+ # passed to throw(), because __exit__() must not raise
+ # an exception unless __exit__() itself failed. But throw()
+ # has to raise the exception to signal propagation, so this
+ # fixes the impedance mismatch between the throw() protocol
+ # and the __exit__() protocol.
+ #
if sys.exc_info()[1] is not value:
raise