Hi, Have a look at the following code snippets: https://gist.github.com/plq/8164035
Observations: output2: I can break out of outer context without closing the inner one in Python 2 output3: Breaking out of outer context closes the inner one, but the closing order is wrong. output3-yf: With yield from, the closing order is fine but yield returns None before throwing. All of the above seem buggy in their own way. And actually, Python 2 seems to leak memory when generators and context managers are used this way. Are these behaviours intentional? How much of it is implementation-dependent? Are they documented somewhere? Neither PEP-342 nor PEP-380 talk about context managers and PEP-343 talks about generators but not coroutines. My humble opinion: 1) All three should behave in the exact same way. 2) Throwing into a generator should not yield None before throwing. Best, Burak ps: I have: $ python -V; python3 -V Python 2.7.5 Python 3.3.2 -- https://mail.python.org/mailman/listinfo/python-list