При взгляде на то, что нового в python 3.5, я нашел PEP 0479. В своем обосновании он представляет пример с помощью @ contextlib.contextmanager. Я посмотрел на источнике этого декоратора, и обнаружил, что исключение передается в выходе метода выбрасываются в это генераторе:Почему обработчики @ textmanager's __exit__ передаются в исключение?
self.gen.throw(type, value, traceback)
Интересно, почему исключения, сгенерированные в с блоком должны быть приняты в этом внутреннем генераторе. Я думаю, что правильным способом является закрытие генератора и распространение исключения.
Ну, это разумно. Но я все же думаю, что способ PEP0479 изменить StopIteration на RuntimeError внутри генератора немного странный. Думаю, мне лучше узнать больше о программировании языка программирования. –